2017-07-31 12 views
6

私は2つの配列の違いを返す関数を書こうとしています。 入力配列はソートされません。私は、入力配列のすべての要素が一意であると仮定しています。例については :2つの整数配列の違いを見つけるには?

入力: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

あなたのコードの問題は、あなたが持っているのいずれかArrayListmnからすべての番号を追加したり、ダブルブレースを使用するArrayList(int[] numbers)のために存在しないコンストラクタを使用しようとしているということです初期化

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はint型ではなくInteger型です。あなたはこれを使用して行う場合は、Integer型を持つように差分の引数を変更することを忘れないで、

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

経由です。これを行う1つの方法は次のとおりです。

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)); 
関連する問題