2017-07-31 82 views
6

我想写一个函数,它返回两个数组之间的差异。 输入数组未被排序。我假设输入数组中的所有元素都是唯一的。 例如:如何找到两个整数数组之间的区别?

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

预期输出:[4,5]

我想实现这个使用一个ArrayList,但无法找到我的代码的问题。 这就是:

public class Difference{ 
ArrayList<Integer> diff(int m[],int n[]) 
    { 
     int mlen = m.length; 
     int nlen = n.length; 
     ArrayList<Integer> arr1 = new ArrayList<Integer>(Arrays.asList(m)); 
     ArrayList<Integer> arr2 = new ArrayList<Integer>(Arrays.asList(n)); 
     if(mlen>nlen) 
     { 
      arr1.removeAll(arr2); 
      return arr1; 
     } 
     else 
     { 
      arr2.removeAll(arr1); 
      return arr2; 
     } 

    } 
    public static void main(String args[]) 
    { 
      Difference obj = new Difference(); 
      int a[] = {1,2,3,4,5}; 
      int b[] = {1,2,3}; 
      System.out.println(obj.diff(a,b)); 
    } 
} 
+2

命令是否重要? –

+1

您是否尝试过调试您的应用程序? – f1sh

+0

@JeanLogeart你是指输出中的顺序吗? – coder7777

回答

2

与您的代码的问题是,你试图使用一个不存在的构造函数ArrayList(int[] numbers)你要么必须从mn每增加一个号码给ArrayList或使用双括号初始化例如

ArrayList <Integer> arr1 = new ArrayList <Integer>() { 
    { 
     for (int i: m) add(i); 
    } 
} 
ArrayList <Integer> arr2 = new ArrayList <Integer>() { 
    { 
     for (int i: n) add(i); 
    } 
} 

在一个线它看起来像这样,不进行格式化

new ArrayList<Integer>() {{for(int i:m) add(i);}};

的其它优选的方式是添加每数而迭代例如

ArrayList<Integer> arr1 = new ArrayList<Integer>(); 
for(int i: m) arr1.add(i); 
0

您的代码是否编译?

正如其他人所建议的,你的ArrayList的类型是Integer,而不是int。 这里有一个编辑:

public static void main(String args[]) 
{ 
     Difference obj = new Difference(); 
     int a[] = {1,2,3,4,5}; 
     int b[] = {1,2,3}; 
     Integer[] anew = Arrays.stream(a).boxed().toArray(Integer[]::new); 
     Integer[] bnew = Arrays.stream(b).boxed().toArray(Integer[]::new); 
     System.out.println(obj.diff(anew,bnew)); 
} 

最后,如果你使用这个,记得要改变的参数为差异有整数类型。

+0

是的,它遵守,但没有得到任何输出。 – coder7777

0

最简单的解决方案是通过jQuery

function array_diff(array1, array2){ 
    var diff = $(array1).not(array2).get(); 
    return diff; 
} 

console.log(array_diff([1,2,3,4,5,6], [1,2,3,4])); 
0

在任何情况下,在这个问题寻找答案在标题的问题永远结束了。这里有一种方法:

int a[] = {1,2,3,4,5}; 
int b[] = {1,2,3,6}; 

int[] uniqueEntries = IntStream.concat(IntStream.of(a), IntStream.of(b)) 
    .filter(x -> !IntStream.of(a).anyMatch(y -> y == x) || !IntStream.of(b).anyMatch(z -> z == x)) 
    .toArray(); 

System.out.println(Arrays.toString(uniqueEntries)); 
相关问题