从2D数组中删除/删除重复项

时间:2017-06-05 18:51:32

标签: java arrays algorithm multidimensional-array diagonal

我正在尝试从对角线数组中删除重复项。 如果您运行我的代码,您将更好地理解我正在尝试做的事情。

我想从该帮助程序数组中删除重复项,但我的重复部分代码适用于所有数字而不是该对角线部分。此外,请不要包含收藏的答案。 这是我遇到麻烦的部分:

 boolean dup = false;

        for (int i = 0; i < array.length; i++) {
         for (int j = 0; j <array[i].length; j++) {
             if (i+j ==array.length-1){
                 if(i == j) {
                     System.out.println("Duplicate "+array[i][j]);
                 }
                 if(array[i] ==array[j]){
                     System.out.println("Duplicate "+array[i][j]);
                     dup = true;
                     break;
                 }
                 System.out.print(array[i][j] + " ");
             }

            else System.out.print(" " + " ");
        }
        System.out.println();
        }

以下是整个事情:

class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter length of N array: ");

        int n = input.nextInt();
        System.out.print("Enter length of M array: ");
        int m = input.nextInt();

        intarray[][] = new int[n][m];

        Random rand = new Random();

        System.out.print("Random nums:");
        for (int i = 0; i <array.length; i++) {
            for (int j = 0; j <array[i].length; j++) {
                System.out.print("X[" +i+ "," +j +"]"+ "-->");
               array[i][j] = rand.nextInt(10);
            }
    }
        for (int i = 0; i <array.length; i++) {
            System.out.println();
        for (int j = 0; j <array[i].length; j++) {
            System.out.print(array[i][j] + " ");
        }
    }
     System.out.println();
     System.out.println("Numbers: ");



        boolean dup = false;

        for (int i = 0; i <array.length; i++) {
         for (int j = 0; j <array[i].length; j++) {
             if (i+j ==array.length-1){
                 if(i == j) {
                     System.out.println("Duplicate "+array[i][j]);
                 }
                 if(array[i] ==array[j]){
                     System.out.println("Duplicate "+array[i][j]);
                     dup = true;
                     break;
                 }
                 System.out.print(array[i][j] + " ");
             }

            else System.out.print(" " + " ");
        }
        System.out.println();
        }

    }
}

1 个答案:

答案 0 :(得分:2)

你有正确的想法来检查是否i == j,但如果检查你在外面检查是否有重复。如果niz[i] == niz[j],您也可以查找。问题是你分别做了这些检查。因此,您使用i==j支票获取对角线上的所有商品,以及使用niz[i] == n[j]支票重复的所有商品。

基本上,您需要结合这些检查:if(i==j)if(niz[i] == niz[j]) 检查它在对角线上的1.和2.是重复的。

尝试使用if检查:if (i==j && niz[i] == niz[j])