2012-10-16 30 views
9

Il mio obiettivo è quello di trovare i valori di intersezione degli array a e b e di memorizzarli in un nuovo array c in modo che la stampa sia: 3,10,4,8. Come posso assegnare determinati valori a un terzo array c?Trovare l'intersezione di due array

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

Se questo non è compito che richiede rigorosamente ickies array, vedere l'interfaccia 'Set' - è leggermente più complicata se è necessaria la manutenzione degli odori, ma non molto. –

+0

hai il codice proprio lì, e un i (ndex) che inizia da 0 che non viene utilizzato. – CBredlow

+0

controlla questo link http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html –

risposta

0

se ArrayList uso consentito per c, la sua gamma growable

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

anche se consentito per ordinare le matrici, vi consiglio di ordinare gamma più piccola e quindi iterazioni su array più grande e ricerca binaria in piccola serie .

+0

Penso che dovresti chiarire che questa è una buona soluzione se è permessa. Per quanto ne sappiamo, potrebbero esserci alcune restrizioni sul progetto dell'OP che non consentono l'uso di ArrayList. –

+0

Grazie. Sono sicuro che questo farebbe qualcosa di cui ho bisogno ma non ho ancora familiarità con ArrayList. –

0

Prima di tutto bisogna allocare spazio per l'array:

int[] c = new int[SOME_SIZE]; 

La parte difficile è capire quanta SOME_SIZE dovrebbe essere. Dal momento che stai calcolando un incrocio, il più possibile è la dimensione del più piccolo di a e b.

Infine, per assegnare un elemento della matrice, basta fare

c[idx] = a[f] 

Ora è necessario tenere traccia di dove idx va. Suggerisco di iniziare con idx = 0 e di incrementarlo ogni volta che trovi un nuovo elemento da aggiungere a c.

+0

Questo è confuso per un principiante. Ma grazie :) –

+0

@AlexandrMelnik Se sei confuso, ti suggerisco di provare a scrivere un programma che copia una matrice in un'altra. Se hai ancora problemi con l'utilizzo degli array in questo programma più semplice, dovresti leggere di più su di loro e tornare con alcune domande specifiche per chiarimenti. –

9

Questo dovrebbe essere un modo semplice per fare.

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

Grazie. Sono sicuro che questo farebbe qualcosa di cui ho bisogno ma non ho ancora familiarità con ArrayList. –

+0

Questo non viene compilato. Per uno, a causa di 'Arrays.asList' che restituisce un' Elenco

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

Speranza che aiuta. Oppure se hai problemi di complessità nel tempo prova il Java Set.

0

Si può prendere un aiuto di variabile temporanea (ma questo è fondamentalmente reinventare la ruota, se non sono tenuti a farlo) -

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

fintanto che entrambi i modi sono giusti, posso preferire qualcuno di loro :) grazie –

+0

Siete i benvenuti. :) –