私はIteratorインターフェイスを実装する内部クラスを実装する必要がある大学の割り当てを持っています。イテレーターは、単一リンクリストのスーパークラスで機能します。Iteratorインターフェイス
現在、私の内部クラスは次のようになります。
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();
}
}
}
今私の問題は、のhasNext()メソッドは、リストが実際に空である場合でもtrueを返すことです。他のすべてがうまくいくようです。おそらくどこかでロジックの欠陥を見落としてしまったかもしれませんが、私はそれを自分で見つけることはできません。
'next'メソッドは値を返すだけでなく、何らかの理由でイテレータを次の位置に移動させることを前提としています –
' next() 'メソッドで' temp'の値を変更するべきではありませんか? – ApproachingDarknessFish
副作用として、イテレータと同じパッケージに['ListIterator']というインターフェース(http://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html)が既にあります。あなたは別の名前を選びたいかもしれません。 – Powerlord