我必须找到两个数组(多维数组和锯齿数组)之间的共同元素

问题描述 投票:0回答:1

我必须找到两个多维且锯齿状的数组之间的共同元素,并仅将它们打印一次。我编写了一些代码并获得了输出,但它打印了数组 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;
        }

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

您的问题是您在找到元素时直接打印元素。这会导致打印

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]
© www.soinside.com 2019 - 2024. All rights reserved.