2017-07-31 16 views
6

İki dizinin arasındaki farkı döndüren bir işlev yazmaya çalışıyorum. Giriş dizileri sıralanmaz. Giriş dizilerindeki tüm öğelerin benzersiz olduğunu varsayalım. Örnek için :İki tam sayı dizisi arasındaki fark nasıl bulunur?

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

Beklenen Çıktı: Bir arraylist kullanarak bu uygulamaya çalışıyorum ama benim koduyla sorunu bulamıyorum [4,5]

. İşte burada:

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

Sipariş önemli mi? –

+1

Uygulamanızda hata ayıklamayı denediniz mi? – f1sh

+0

@JeanLogeart Çıktının sırasını mı kastediyorsunuz? – coder7777

cevap

2

sizin koduyla sorun, You have ya ArrayList için m ve n her numara ekleyebilir veya bir çift ayracı kullanmak ArrayList(int[] numbers) için var olmayan bir yapıcı kullanmaya çalışıyor olmasıdır başlangıç

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

bir paralel olarak bu, örneğin yineleme sırasında her numara eklemek olacaktır

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

Tercih edilen diğer bir şekilde biçimlendirmeden gibi görünür

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

Kodunuz derleniyor mu?

Başka biri önerildiği gibi, ArrayList'iniz Integer türünde değil, int. Bunu kullanmak yaparsanız, tip Tamsayı olması fark için argümanlar değiştirmeyi unutmayın,

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)); 
} 

Son olarak: İşte bir düzenleme bu.

+0

Evet, uygun ancak herhangi bir çıktı almadı. – coder7777

0

kolay çözüm hiç kimse başlığında sorusuna cevap arayan bu söz konusu biter durumda 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

yoluyladır. İşte bunu yapmanın bir yolu var:

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));