2012-10-16 28 views
9

Mục tiêu của tôi là tìm ra giá trị của giao điểm của mảng a và b và lưu chúng vào một mảng mới c sao cho bản in sẽ là: 3,10,4,8. Làm cách nào để gán giá trị đã cho cho mảng thứ 3 c?Tìm giao điểm của hai mảng

public static void main(String[] args) { 
     int a[] = {3, 10, 4, 2, 8}; 
     int[] b = {10, 4, 12, 3, 23, 1, 8}; 
     int[] c; 
     int i=0; 
     for(int f=0;f<a.length;f++){ 
       for(int k=0;k<b.length;k++){ 
        if(a[f]==b[k]){ 
//here should be a line that stores equal values of 2 arrays(a,b) into array c 
      } 
      } 
     } 
      for (int x=0; x<c.length; x++){ 
      System.out.println(c[i]); 
      } 
     } 
    } 
+1

Nếu đây không phải là bài tập về nhà mà đòi hỏi nghiêm ngặt ickies mảng, xem giao diện 'Set' - nó hơi phức tạp hơn nếu yêu cầu bảo trì oder, nhưng không nhiều. –

+0

bạn có mã ngay tại đó và i (ndex) bắt đầu bằng 0 không được sử dụng. – CBredlow

+0

kiểm tra liên kết này http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html –

Trả lời

0

nếu được phép sử dụng ArrayList cho c, mảng growable nó

ArrayList c = new ArrayList(); 
. 
. 
. 
. 
. 
c.add(a[f]); 

cũng nếu được phép để sắp xếp mảng, tôi khuyên bạn nên để sắp xếp mảng nhỏ hơn và sau đó lặp qua mảng lớn hơn và tìm kiếm nhị phân trong mảng nhỏ .

+0

Tôi nghĩ bạn nên làm rõ rằng đây là giải pháp tốt nếu được phép. Đối với tất cả chúng ta biết, có thể có một số hạn chế đối với dự án của OP không cho phép sử dụng ArrayList. –

+0

Cảm ơn bạn. Tôi chắc chắn điều này sẽ làm một cái gì đó tôi cần nhưng tôi không quen thuộc với ArrayLists được nêu ra. –

0

Trước tiên, bạn cần phải phân bổ không gian cho mảng của bạn:

int[] c = new int[SOME_SIZE]; 

Phần cứng là tìm hiểu SOME_SIZE nên bao nhiêu. Vì bạn đang tính toán giao lộ, nhiều nhất nó có thể là kích thước nhỏ nhất của ab.

Cuối cùng, để gán một phần tử trong mảng, bạn chỉ cần làm

c[idx] = a[f] 

Bây giờ bạn cần phải theo dõi các nơi idx đi. Tôi đề nghị bắt đầu với idx = 0 và tăng nó mỗi khi bạn tìm thấy một yếu tố mới để thêm vào c.

+0

Điều đó gây nhầm lẫn cho người mới bắt đầu. Nhưng cảm ơn bạn :) –

+0

@AlexandrMelnik Nếu bạn bối rối, tôi khuyên bạn nên thử viết một chương trình sao chép mảng này sang mảng khác. Nếu bạn vẫn gặp vấn đề với việc sử dụng các mảng trong chương trình đơn giản này, thì bạn nên đọc thêm về chúng và quay trở lại với một số câu hỏi cụ thể để làm rõ. –

9

Đây phải là cách dễ dàng để thực hiện.

int a[] = {3, 10, 4, 2, 8}; 
int[] b = {10, 4, 12, 3, 23, 1, 8}; 
List<Integer> aList = Arrays.asList(a); 
List<Integer> bList = Arrays.asList(b); 
aList.retainAll(bList); 
System.out.println(" a intersection b "+aList); 
int[] c = aList.toArray(new int[0]); 
+0

Cảm ơn bạn. Tôi chắc chắn điều này sẽ làm một cái gì đó tôi cần nhưng tôi không quen thuộc với ArrayLists được nêu ra. –

+0

Điều này không biên dịch. Đối với một, vì 'Arrays.asList' trả về một' List

1
public static void main(String[] args) { 
     int a[] = {3, 10, 4, 2, 8}; 
     int[] b = {10, 4, 12, 3, 23, 1, 8}; 
     int[] c = new int[(int)Math.min(a.length, b.length)]; 
     int i=0; 
     for(int f=0;f<a.length;f++){ 
       for(int k=0;k<b.length;k++){ 
        if(a[f]==b[k]){ 
        c[i] = a[f]; 
        i++; 
      } 
      } 
     } 
     for (int x=0; x<i; x++){ 
      System.out.println(c[x]); 
     } 
     } 
    } 

Hy vọng điều đó sẽ hữu ích. Hoặc nếu bạn gặp vấn đề phức tạp về thời gian thì hãy thử Java Set.

0

Bạn có thể tham gia một sự giúp đỡ của biến tạm thời (nhưng điều này về cơ bản là reinventing the wheel, nếu bạn không cần phải làm như vậy) -

int[] c = new int[0]; 
//... 
    if(a[f] == b[k]) { 
     int[] temp = c; 
     c = new int[c.length + 1]; 
     for(int i=0; i<temp.length; i++) { 
      c[i] = temp[i]; 
     } 
     c[c.length - 1] = a[f]; 
    } 
//... 
+0

miễn là cả hai cách là đúng Tôi có thể thích bất kỳ trong số họ :) cảm ơn bạn –

+0

Bạn được chào đón. :) –

Các vấn đề liên quan