Mam przypisanie Uniwersytetu, który wymaga mnie do wdrożenia wewnętrznej klasy, która implementuje interfejs Iterator. Iterator działa na superklasie listy pojedynczego łącza.Interfejs Iteratora
Obecnie mój wewnętrzny klasy wygląda następująco:
private class ListIterator implements Iterator<V>{
Node temp;
boolean nextCalled = false;
ListIterator(Node fo){
this.temp = fo;
}
@Override
public boolean hasNext() {
if(temp != null){
return true;
}
return false;
}
@Override
public V next() {
nextCalled = true;
return temp.getReprValue();
}
@Override
public void remove() {
if(nextCalled && hasNext()){
nextCalled = false;
removeElement(temp.getReprKey());
temp = temp.getNext();
}
}
}
Teraz moim problemem jest to, że metoda hasNext() zwraca wartość true, nawet gdy lista jest rzeczywiście pusty. Wszystko inne wydaje się działać. Prawdopodobnie przeoczyłem błąd logiczny, ale nie mogę go znaleźć.
Metoda 'next' ma nie tylko zwrócić wartość, ale jakoś przenieść iterator do następnej pozycji, Twoja implementacja po prostu przechowuje flagę –
Czy nie powinna być zmieniona wartość' temp' w twojej metodzie 'next()'? – ApproachingDarknessFish
Na marginesie, istnieje już interfejs o nazwie ['ListIterator'] (http://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html) w tym samym pakiecie co Iterator. więc możesz chcieć wybrać inną nazwę: – Powerlord