Frage

Ich programmiere in Java Ich habe eine Klasse erstellt, um einen Iterator zu erhalten, da ich in diesem Programm nur eine Liste mit diesem Code verwende

public ListIterator<T> iterateur() {
    ListIterator<T> it = liste.listIterator();
    return it;
}

Und dann versuche ich es mit dieser Methode zu verwenden

public int ObtenirNbElments(int priorite) {
    int nbPrio=0;
    while(this.iterateur().hasNext()){
        if(this.iterateur().next().obtenirPriorite() == priorite){
            nbPrio++;
        }
    }
    return nbPrio;
}

Wann immer ich es mit meiner Testklasse als solcher benutze:

    listePriorite.ajouter(elt1);
    listePriorite.ajouter(elt2);
    listePriorite.ajouter(elt3);
    listePriorite.ajouter(elt4);
    listePriorite.ajouter(eltd1);
    assertEquals(2,listePriorite.ObtenirNbElments(1));

Es scheint in eine Endlosschleife einzutreten, warum ist das so?

War es hilfreich?

Lösung

Jedes Mal, wenn du anrufst iterateur() sie erstellen und geben ein neues zurück ListIterator.Rufen Sie die Methode nur einmal auf und speichern Sie das Ergebnis.Verwenden Sie dasselbe Objekt erneut.

int nbPrio=0;
ListIterator<T> it = this.iterateur();
while(it.hasNext()){
    if(it.next().obtenirPriorite() == priorite){
        nbPrio++;
    }
}
return nbPrio;

(Ich gehe davon aus, dass Sie T hat Grenzen, die Sinn machen mit obtenirPriorite().)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top