2017-07-31 13 views
6

Tôi đang cố gắng viết một hàm trả về sự khác biệt giữa hai mảng. Các mảng đầu vào không được sắp xếp. Tôi giả sử rằng tất cả các phần tử trong mảng đầu vào là duy nhất. Ví dụ:Làm thế nào để tìm sự khác biệt giữa hai mảng số nguyên?

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

Dự kiến ​​Output: [4,5]

Tôi đang cố gắng để thực hiện điều này bằng một ArrayList nhưng không thể tìm ra vấn đề với mã của tôi. Ở đây là:

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

Đơn đặt hàng có quan trọng không? –

+1

Bạn đã thử gỡ lỗi ứng dụng của mình chưa? – f1sh

+0

@JeanLogeart Bạn có nghĩa là thứ tự trong đầu ra không? – coder7777

Trả lời

2

Vấn đề với mã của bạn là bạn đang cố gắng sử dụng một constructor không tồn tại cho ArrayList(int[] numbers) Bạn có thể phải thêm mỗi số từ mn đến ArrayList hoặc sử dụng một cú đúp đúp khởi tạo ví dụ

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

Trong một dòng nó sẽ trông như thế này mà không cần định dạng

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

Cách ưa thích khác sẽ có thêm mỗi số trong khi lặp lại ví dụ

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

Mã của bạn có biên dịch không?

Khi người khác đề xuất, ArrayList của bạn thuộc loại Integer, không phải int. Đây là bản chỉnh sửa:

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

Cuối cùng, nếu bạn sử dụng điều này, hãy nhớ thay đổi các đối số để có loại số nguyên.

+0

Có, nó tuân thủ nhưng không nhận được bất kỳ đầu ra. – coder7777

0

Giải pháp đơn giản nhất là qua 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

Trong trường hợp ai đã từng kết thúc trong câu hỏi này tìm kiếm một câu trả lời cho câu hỏi ở tiêu đề. Dưới đây là một cách để thực hiện:

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)); 
Các vấn đề liên quan