【问题标题】:Delete/Remove duplicates from 2D array从二维数组中删除/删除重复项
【发布时间】:2017-11-06 15:05:12
【问题描述】:

我正在尝试从对角数组中删除重复项。 如果你运行我的代码,你会更好地理解我想要做什么。

我想从该辅助数组中删除重复项,但我的重复部分代码适用于所有数字而不是对角线部分。另外,请不要在集合中包含答案。 这是我遇到问题的部分:

 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();
        }

    }
}

【问题讨论】:

  • 在调试器下逐步运行代码,您将能够实时检查所有变量。
  • If you run my code you will understand what's going on. 或者你可以告诉我们发生了什么。努力解决你的问题。
  • 我也确实包含了解释。在你说什么之前,你可以努力阅读所有内容。 @Jashaszun

标签: java arrays algorithm multidimensional-array diagonal


【解决方案1】:

你有正确的想法来检查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 &amp;&amp; niz[i] == niz[j])

【讨论】:

  • 谢谢!这有帮助!当我有正确的循环时,你知道如何删除它们吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2013-12-18
相关资源
最近更新 更多