|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 37
|
[java] Confronto tra due ArrayList
Ciao, ho implementato un metodo che dovrebbe confrontare uno ad uno gli elementi di due arraylist , e ritorna true se gli elementi della seconda sono contenuti nella prima. non sono sicuro dell'esattezza del metodo, vi posto il codice.
Codice:
public boolean disponibilita(ArrayList lista2){
boolean t=false;
for (int i = 0; i < lista1.size(); i++){
Attrezzo attrezzocass = (Attrezzo) lista1.get(i);
for(int j = 0; j < lista2.size(); j++){
String attrezzocheck = (String)listaAttrezzicheck.get(j);
if (attrezzocass.equals(attrezzocheck)){
t=true;
}
}
}
return t;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Nella firma del metodo ti sei dimenticato lista1, in ogni caso così non va bene perchè basta che uno degli elementi di lista2 sia uguale a uno di lista1 perchè il metodo ritorni true
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Oct 1999
Messaggi: 111
|
Quote:
Penso che il codice di cui hai bisogno dovrebbe essere questo Codice:
trovato=false;
i=0;
while ((i<lista2.size())){
/**
* prendi un elemento della seconda lista: vuoi controllare che la prima
* contenga quelli della seconda. Quindi immagino che la prima possa
* contenere elementi non contenuti nella seconda, ma non deve essere
* vero il viceversa
*/
String attrezzocheck = (String)listaAttrezzicheck.get(i);
//confronta tutti gli elementi della prima con l'elemento corrente
j=0;
while(j<lista1.size()) {
Attrezzo attrezzocass = (Attrezzo) lista1.get(j);
trovato=attrezzocass.equals(attrezzocheck));
/**
* una volta che hai trovato l'elemento della seconda nella prima
* è inutile continuare a cercare nella prima... puoi cominciare a
* controllare l'elemento successivo della seconda
if (trovato) continue;
j++
}
/**
* a questo punto se non hai trovato l'elemento cercato durante il
* ciclo precedente è inutile continuare a cercare perchè sicuramente
* un elemento della seconda lista non è presente nella prima
* quindi puoi uscire dalla funzione restituendo false;
*/
if(!trovato) return trovato;
i++
}
/**
* se sei arrivato qui in pratica non sei mai uscito in precedenza e quindi
* trovato deve essere rimasto true per tutto il corso della funzione
* in questo caso restituisci true
*/
return trovato;
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
direi di no, basta che uno qualsiasi degli elementi di lista2 sia uguale a uno di lista1 perche' la variabile t venga messa a true e non ci sono istruzioni che ne possano modificare ulteriormente il valore prima del return |
|
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Oct 1999
Messaggi: 111
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 37
|
il metodo che mi avete suggerito non funziona, non arriva mai al return finale...
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 37
|
ho implementato questa soluzione, che ne dite?
Codice:
public synchronized boolean disponibilita (ArrayList lista2) {
boolean trovato=false;
int i =0;
int j=0;
while (i<lista2.size() && j<lista1.size()){
String attrezzocheck = (String)lista2.get(i);
Attrezzo attrezzocass = (Attrezzo) lista1.get(j);
if (attrezzocass.equals(attrezzocheck)){
trovato=true;
i++;
j=0;
}
else {
j++;}
if(!trovato && j==lista1.size()) {
trovato=false;
} else if (trovato && i==lista2.size()) {
trovato= true;
}
}
return trovato;
}
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Oct 1999
Messaggi: 111
|
Quote:
Codice:
while(j<lista1.size()) {
Attrezzo attrezzocass = (Attrezzo) lista1.get(j);
trovato=attrezzocass.equals(attrezzocheck));
/**
* una volta che hai trovato l'elemento della seconda nella prima
* è inutile continuare a cercare nella prima... puoi cominciare a
* controllare l'elemento successivo della seconda
if (trovato) break;
j++
}
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:37.



















