删除二维数组java中的重复值

时间:2013-11-25 23:28:29

标签: java multidimensional-array duplicate-removal

我遇到了一个非常大的问题,因为我需要删除随机X x Y数组中的任何重复数字。我尝试通过在另一个内部写四个“fors”来做到这一点,但它没有用。有人能帮我吗? 假设阵列中有34次,所以第一个将保持34,其他将设置为0,另一个将保持为0。

for (int linha = 0; linha < tamanhoLinhas; linha++) {
        for (int coluna = 0; coluna < tamanhoColunas; coluna++) {
            matriz[linha][coluna] = rand.nextInt(100);
        }
    }

    for (int linha = 0; linha < tamanhoLinhas; linha++) {
        for (int coluna = 0; coluna < tamanhoColunas; coluna++) {
            int numeroAtual = matriz[linha][coluna];
            for (int linha2 = 0; linha2 < tamanhoLinhas; linha2++) {
                for (int coluna2 = 0; coluna2 < tamanhoColunas; coluna2++) {
                    if (numeroAtual == matriz[linha][coluna]){
                        matriz[linha][coluna] = 0;
                    }
                }
            }
        }
    }

    for (int i = 0; i < tamanhoLinhas; i++) {
        for (int j = 0; j < tamanhoColunas; j++) {
            System.out.print(matriz[i][j] + " ");
        }
        System.out.println();
    }
}

2 个答案:

答案 0 :(得分:0)

for (int linha = 0; linha < tamanhoLinhas; linha++) {
    for (int coluna = 0; coluna < tamanhoColunas; coluna++) {
        int numeroAtual = matriz[linha][coluna];
        for (int linha2 = 0; linha2 < tamanhoLinhas; linha2++) {
            for (int coluna2 = 0; coluna2 < tamanhoColunas; coluna2++) {
                if (numeroAtual == matriz[linha][coluna]){
                    matriz[linha][coluna] = 0;
                }
            }
        }
    }
}

此代码导致将数组的每个元素设置为零。举个例子,假设

linha == 3, coluna == 3

进入第三个for循环,然后numeroAtual == 22。内部循环将扫描整个数组,在某一点上将达到[3,3],这将等于numeroAtual;这将导致matriz[3,3]的值设置为零。

这将重复矩阵中的每个元素。

答案 1 :(得分:0)

嗯,我做到了,但现在有点不同了。 最初,程序将修改所有重复的数字,但现在用户只选择一个,程序创建一个随机的二维数组并找到重复的数字并将它们切换为0。 我是这样做的:     public void questao7(int numeroSelecionado){

    int tamanhoLinhas = (rand.nextInt(9) + 1);
    int tamanhoColunas = (rand.nextInt(9) + 1);
    int matriz[][] = new int[tamanhoLinhas][tamanhoColunas];
    boolean duplicado = false;

    for (int linha = 0; linha < tamanhoLinhas; linha++) {
        for (int coluna = 0; coluna < tamanhoColunas; coluna++) {
            matriz[linha][coluna] = rand.nextInt(100);
        }
    }

    System.out.println("Matriz original: ");
    for (int i = 0; i < tamanhoLinhas; i++) {
        for (int j = 0; j < tamanhoColunas; j++) {
            System.out.print(matriz[i][j] + " ");
        }
        System.out.println();
    }

    for (int linha = 0; linha < tamanhoLinhas; linha++) {
        for (int coluna = 0; coluna < tamanhoColunas; coluna++) {
            if (!duplicado) {
                if (matriz[linha][coluna] == numeroSelecionado){ 
                    duplicado = true;
                }                     
            } else if (matriz[linha][coluna] == numeroSelecionado) { 
                matriz[linha][coluna] = 0; 
            }
        }
    }

    System.out.println("Matriz modificada: ");
    for (int i = 0; i < tamanhoLinhas; i++) {
        for (int j = 0; j < tamanhoColunas; j++) {
            System.out.print(matriz[i][j] + " ");
        }
        System.out.println();
    }
}