Cercando di testare un lisciatore ma entra in un ciclo infinito
-
21-12-2019 - |
Domanda
Sto programmando in Java ho creato una classe per ottenere un iteratore poiché sto usando solo un elenco in questo programma con questo codice
public ListIterator<T> iterateur() {
ListIterator<T> it = liste.listIterator();
return it;
}
.
E poi cerco di usarlo con questo metodo
public int ObtenirNbElments(int priorite) {
int nbPrio=0;
while(this.iterateur().hasNext()){
if(this.iterateur().next().obtenirPriorite() == priorite){
nbPrio++;
}
}
return nbPrio;
}
.
Ogni volta che lo uso con la mia classe di test in quanto tale:
listePriorite.ajouter(elt1);
listePriorite.ajouter(elt2);
listePriorite.ajouter(elt3);
listePriorite.ajouter(elt4);
listePriorite.ajouter(eltd1);
assertEquals(2,listePriorite.ObtenirNbElments(1));
.
Sembra entrare in un loop infinito, perché è quello?
Soluzione
Ogni volta che si invoca iterateur()
crei e restituisci un nuovo ListIterator
.Chiama il metodo solo una volta e memorizza il risultato.Riutilizzare lo stesso oggetto.
int nbPrio=0;
ListIterator<T> it = this.iterateur();
while(it.hasNext()){
if(it.next().obtenirPriorite() == priorite){
nbPrio++;
}
}
return nbPrio;
.
(Supponendo che il tuo T
abbia limiti che hanno senso con obtenirPriorite()
.)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow