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
在这里,我必须停止迭代两次,因为一旦打印就已经检查过了。 注意:我只想用循环语句和条件语句回答,没有哈希集或快捷方式。
每个数组需要一个循环,然后每个子数组需要一个循环。
此外,我在这里使用 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]