Ho un incarico universitario che richiede l'implementazione di una classe interna che implementa l'interfaccia Iterator. L'iteratore funziona su una superclasse di elenco single-linked.Interfaccia Iterator
Attualmente la mia classe interna si presenta così:
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();
}
}
}
Ora il mio problema è che il metodo hasNext() restituisce vero anche quando la lista è in realtà vuota. Tutto il resto sembra funzionare. Probabilmente ho trascurato un difetto logico da qualche parte, ma non riesco a trovarlo da solo.
'next' metodo supposto non solo per restituire valore, ma in qualche modo spostare iteratore nella posizione successiva.L'implementazione memorizza semplicemente un flag –
Non dovrebbe essere cambiato il valore di' temp' nel metodo 'next()'? – ApproachingDarknessFish
In una nota a margine, esiste già un'interfaccia denominata ['ListIterator'] (http://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html) nello stesso pacchetto di Iterator. . quindi potresti voler scegliere un nome diverso. – Powerlord