2012-10-16 12 views
9

Amacım a ve b dizilerinin kesişim değerlerini bulmak ve bunları yeni bir dizide saklamaktır, böylece çıktı: 3,10,4,8. Verilen değerleri 3. diziye nasıl atayabilirim c?İki dizinin kesişim noktasını bulma

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

bu kesinlikle dizi ickies gerektirir ödev değilse, bkz 'Set' arayüzü - oder bakımı gerekli ise biraz daha zor ama çok fazla değil. –

+0

kodunuz var ve kullanılmayan 0'da başlayan bir i (ndex) var. – CBredlow

+0

bu bağlantıyı kontrol edin http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html –

cevap

0

eğer c izin kullanımı ArrayList onun zamanında genişleyen dizi

ArrayList c = new ArrayList(); 
. 
. 
. 
. 
. 
c.add(a[f]); 
diziler sıralamak için izin veriliyorsa

da, ben daha küçük diziyi sıralamak ve daha sonra daha küçük dizide büyük diziden ve ikili arama yineleme tavsiye .

+0

Eğer izin verilirse bunun iyi bir çözüm olduğunu açıklığa kavuşturmalısınız. Bildiğimiz kadarıyla, OP'nin projesinde ArrayList kullanımına izin vermeyen bazı kısıtlamalar olabilir. –

+0

Teşekkürler. Eminim ki ihtiyacım olan bir şey yapardım ama henüz ArrayLists'e aşina değilim. –

0

Öncelikle dizinin alanı ayırmaya gerek:

int[] c = new int[SOME_SIZE]; 

zor kısmı SOME_SIZE nasıl olması gerektiği kadar tespit etmektir. Bir kesişim yaptığınız için, en küçük olanı a ve b'un en küçük boyutudur.

Son olarak, dizideki bir öğe atamak, sadece

c[idx] = a[f] 

Şimdi idx nereye gittiğini takip etmek gerekiyor. idx = 0 ile başlamanızı ve c'a eklemek için yeni bir öğe bulduğunuz her zaman artırmanızı öneririm.

+0

Yeni başlayanlar için kafa karıştırıcı. Ama teşekkür ederim :) –

+0

@AlexandrMelnik Eğer kafanız karıştıysa, bir diziyi diğerine kopyalayan bir program yazmaya çalışın. Bu daha basit programda dizileri kullanmakta hala sorun yaşıyorsanız, bunlar hakkında daha fazla bilgi edinmeli ve açıklama için bazı özel sorularla geri dönmelisiniz. –

9

Bu, yapılması kolay bir yol olmalı.

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

Teşekkürler. Eminim ki ihtiyacım olan bir şey yapardım ama henüz ArrayLists'e aşina değilim. –

+0

Bu, derlenmiyor. Birincisi, 'Arrays.asList 'bir' 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]); 
     } 
     } 
    } 

yardımcı olur Umut. Veya zaman karmaşıklığı sorununuz varsa Java Set'u deneyin.

0

Geçici değişken bir yardım alabilir (ancak bunu yapmak için gerekli değilse bu temelde, tekerleği yeniden icat edilir) -

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

Her iki yoldan da doğru olduğu sürece onları tercih edebilirim :) Teşekkür ederiz –

+0

:) –