2017-07-31 58 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)); 
相關問題