我必须找到两个多维且锯齿状的数组之间的共同元素,并仅将它们打印一次。我编写了一些代码并获得了输出,但它打印了数组 1 和数组 2 中的所有公共元素,它只需打印一次。 我的意思是如果数组 1 是 [5, 5,3] 数组 2 是 [5, 5, 6,2] 输出是 [5, 5, 5,5]。我只需打印 5 一次。
在这里,我已经停止多次打印数组 2 中的重复元素,因为我插入了布尔标签。 但无法从数组 1 停止。对于示例,必须 1 次获取 5 个元素并检查它在数组 2 中是否可用,如果存在,则打印 5 作为输出。
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}};
System.out.println("Input 1:");
for (int i = 0; i < arr1.length; i++) {
System.out.println(Arrays.toString(arr1[i]));
}
System.out.println("Input 2:");
for (int j = 0; j < arr2.length; j++) {
System.out.println(Arrays.toString(arr2[j]));
}
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;
}
}
}
您的问题是您在找到元素时直接打印元素。这会导致打印
arr1
中的重复项。
HashSet
来存储两个数组中找到的唯一元素并消除重复项。然后打印该集合:
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
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}};
Set<Integer> commonSet = new HashSet<>();
for (int i = 0; i < arr1.length; ++i) {
for (int j = 0; j < arr1[i].length; ++j) {
int val = arr1[i][j];
if (commonSet.contains(val)) continue;
for (int k = 0; k < arr2.length; ++k) {
for (int l = 0; l < arr2[k].length; ++l) {
if (val == arr2[k][l]) {
commonSet.add(val);
break;
}
}
}
}
}
System.out.println(commonSet);
}
}
输出:
[1, 2, 3, 6, 7]