从锯齿状数组和多维数组打印两个数组之间的公共元素

问题描述 投票:0回答:1
    int[][] arr1 = new int[][] {{1,2,1},{9,7,2},{7,3,6}};

    int arr2[][] = new int[][] {{2,6,8},{0,1,7},{7,2,0},{8,3}};

    boolean duplicate= false;

    for(int i=0;i<arr1.length;i++) { 
        for(int j=0;j<arr1[i].length;j++) {
            int transpose = 0;
            transpose = arr1[i][j];

            for(int k=0;k<arr2.length;k++) {
                duplicate = false; 
                for(int  l=0;l<arr2[k].length;l++) { 
                    if(transpose == arr2[k][l]) {
                        System.out.println(transpose);
                        duplicate = true;
                        break;
                    }
                }
            
                if(duplicate)
                    break;
            }
        }

    }

}

}

我尝试在不使用任何快捷方式的情况下仅使用 for 循环和 if 语句逻辑地打印常见元素。逻辑是,在数组 1 中,我迭代每个元素并检查它是否在数组 2 中,如果存在,我们必须在控制台中打印它。但问题是在数组 1 元素“1,2,7”中迭代了 2 次并打印了 2 次。

得到这个输出: 1 2 1 7 2 7 3 6

预期输出: 1 2 7 3 6

在这里,我必须停止迭代两次,因为一旦打印就已经检查过了。 注意:我只想用循环语句和条件语句回答,没有哈希集或快捷方式。

java multidimensional-array duplicates jagged-arrays
1个回答
0
投票

每个数组需要一个循环,然后每个子数组需要一个循环

此外,我在这里使用 Set 来防止重复值。

Set<Integer> d = new TreeSet<>();
int i, ni, j, nj;
for (int[] x : arr1)
    for (i = 0, ni = x.length; i < ni; i++)
        for (int[] y : arr2)
            for (j = 0, nj = y.length; j < nj; j++)
                if (x[i] == y[j]) d.add(x[i]);

输出

[1, 2, 3, 6, 7]
© www.soinside.com 2019 - 2024. All rights reserved.