|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
[Java] problema con array
Ciao a tutti. Devo implementare un metodo
public static int[] creaVett(int[] a, int[] b) che riceva in ingresso due array di numeri interi a e b e restituisca un array di interi. L’array di ouput contiene gli elementi che compaiono in a ma non in b, ad es.: a: 1 | 2 | 3 | 5 | 6 | 5; b: 2 | 6 | 4 output: 1 | 3 | 5 | 5 Io ho provato così ma non mi funziona. chi mi aiuta? grazie Codice:
public static int[] creaVett(int[] a, int[] b){
int j = 0;
int k = 0;
int[] d = new int[a.length];
for(int i = 0; i < a.length; i++){
while(j<b.length){
if(a[i]!=b[j]){
d[k]=a[i];
k++;
}
j++;
}
}
return d;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Per ogni elemento nell'array 'a' devi scansionare l'array 'b' per vedere se esiste. Se lo trovi sai già subito che non dovrai metterlo nell'array di output. Se non c'è lo sai solo alla fine della scansione di 'b'! Questo vuol dire che solo quando avrai finito di scansionare l'array 'b' allora saprai che l'elemento deve essere inserito nell'array di output.
Il concetto è ben diverso da quello che hai implementato tu.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Questa come ti sembra?
Codice:
public static int[] creaVett(int[] a, int[] b){
int j = 0;
int k = 0;
//int i = 0;
int[] d = new int[a.length];
for(int i = 0; i < a.length; i++){
while(j<b.length){
if(a[i]==b[j]){
j++;
}
else{
d[k]=a[i];
k++;
}
}
}//for
return d;
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
A occhio direi che non è ancora corretto. Solo alla fine della scansione (se non hai trovato l'elemento) sai che devi inserire l'elemento nell'array di output.
Se trovi che a[i] != b[j] non vuol dire che devi subito inserire l'elemento. Perché l'elemento successivo in 'b' potrebbe corrispondere. Per dirla ancora in altri termini: se in 'b' trovi l'elemento, devi terminare subito la scansione di 'b' e sai che non devi inserire l'elemento. Altrimenti devi andare avanti e solo alla fine della scansione di 'b' sai che l'elemento va aggiunto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2007
Città: Torino
Messaggi: 95
|
Ok. Ma come posso "dirlo" in java?
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Potresti tenere un "flag". Prima di iniziare il ciclo su 'b' metti questo flag (va bene un boolean, ad esempio) in modo da indicare la condizione di "non trovato". Appena trovi una corrispondenza, setti il flag in modo da indicare la condizione di "trovato" ed esci dal ciclo.
Dopo il ciclo testi il flag e se indica "non trovato", allora aggiungi l'elemento. Esiste anche una soluzione più furba che evita l'utilizzo di una variabile di flag. Si tratta di sfruttare la istruzione di continue con label (etichetta).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:22.




















