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?

È stato utile?

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
scroll top