Пытаюсь протестировать ListIterator, но он переходит в бесконечный цикл
-
21-12-2019 - |
Вопрос
Я программирую на Java, я создал класс для получения одного итератора, так как я использую только один список в этой программе с этим кодом
public ListIterator<T> iterateur() {
ListIterator<T> it = liste.listIterator();
return it;
}
И тогда я пытаюсь использовать его с помощью этого метода
public int ObtenirNbElments(int priorite) {
int nbPrio=0;
while(this.iterateur().hasNext()){
if(this.iterateur().next().obtenirPriorite() == priorite){
nbPrio++;
}
}
return nbPrio;
}
Всякий раз, когда я использую его со своим тестовым классом как таковым:
listePriorite.ajouter(elt1);
listePriorite.ajouter(elt2);
listePriorite.ajouter(elt3);
listePriorite.ajouter(elt4);
listePriorite.ajouter(eltd1);
assertEquals(2,listePriorite.ObtenirNbElments(1));
Кажется, что это входит в бесконечный цикл, почему это так?
Решение
Каждый раз, когда вы вызываете iterateur()
вы создаете и возвращаете новый ListIterator
.Вызовите метод только один раз и сохраните результат.Повторно используйте тот же объект.
int nbPrio=0;
ListIterator<T> it = this.iterateur();
while(it.hasNext()){
if(it.next().obtenirPriorite() == priorite){
nbPrio++;
}
}
return nbPrio;
(Я предполагаю, что ваш T
имеет границы, которые имеют смысл с obtenirPriorite()
.)
Не связан с StackOverflow