找到两个整数数组之间的差异

时间:2017-08-01 03:14:27

标签: java arraylist

我正在编写一个返回两个整数数组之间差异的函数。我假设输入数组中的所有元素都是唯一的,并且输入数组也没有排序。例如:

输入:
arr1 = [1,2,3,5,4]
arr2 = [1,2,3]

预期输出:[4,5]

我的输出:[1,2,3,4,5](当第一个数组大于第二个数组时)

当我使第二个数组大于第一个时,我得到ArrayIndexOutOfBoundsException

public class Test{

     public static void main(String args[])
    {

        Scanner sc = new Scanner(System.in);
        System.out.println("Enter length of first array");
        int ml = sc.nextInt();
        System.out.println("Enter length of second array");
        int nl = sc.nextInt();
        int m[] = new int[ml];
        int n[] = new int[nl];
        System.out.println("Enter elements of first array");
        for(int i=0;i<ml;i++)
        {
            m[i] = sc.nextInt();
        }

        System.out.println("Enter elements of second array");
        for(int j=0;j<nl;j++)
        {
            m[j] = sc.nextInt();
        }
        ArrayList<Integer> arr1 = new ArrayList<Integer>();
        for(int i: m){ arr1.add(i);}
        ArrayList<Integer> arr2 = new ArrayList<Integer>();
        for(int j: n){ arr2.add(j);}
        if(ml>nl)
        {
            arr1.removeAll(arr2);
            System.out.println(arr1);
        }
        else
        {
            arr2.removeAll(arr1);
            System.out.println(arr2);
        }
    }
}

3 个答案:

答案 0 :(得分:2)

在第二次迭代中,您应该使用n[j] = ...而不是m[j] = ... 你应该使用更多的描述性变量名来防止事情发生。

答案 1 :(得分:0)

如果不是让你练习数组/迭代的作业,你可以考虑使用Set来实现更简单的逻辑:

// pseudo-code
Set<Integer> set1 = new HashSet<>(array1);
Set<Integer> set2 = new HashSet<>(array2);

// Using Guava
Set<Integer> diff = Sets.symmetricDifference(set1, set2);

// Java only
Set<Integer> diff1 = new HashSet<>(set1);
diff1.removeAll(set2);  // diff1 contains entries in array1 but not 2
Set<Integer> diff2 = new HashSet<>(set2);
diff2.removeAll(set1);  // diff2 contains entries in array2 but not 1

Set<Integer> diff = new HashSet<>(set1);
diff.addAll(set2);


// Java only, using stream
return Stream.concat(set1.stream(), set2.stream())
             .filter(i -> ! (set1.contains(i) && set2.contains(i)))
             .collect(Collectors.toSet());

答案 2 :(得分:0)

您可以检查第二个元素是否存在,否则可以添加到输出数组,如下所示:

users