Die Iterator-Schnittstelle

Habe ich eine universitäre Aufgabe, die mich verpflichtet, die Implementierung einer inneren Klasse implementiert das Iterator-interface. Der iterator arbeitet auf einer single-Link-Liste Superklasse.

Derzeit meine innere Klasse sieht wie folgt aus:

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();
        }

    }

}

Nun mein problem ist, dass die hasNext () - Methode gibt true zurück, auch wenn die Liste wirklich leer ist. Alles andere scheint zu funktionieren. Habe ich wohl übersehen, ein Logik-Fehler irgendwo, aber ich kann es nicht finden mich.

  • next Methode soll nicht nur die Rückkehr Wert, aber irgendwie bewegen iterator in die nächste position. Ihre Umsetzung nur speichert ein flag.
  • Sollte nicht der Wert von temp geändert werden in Ihrem next() Methode?
  • Auf einer seitlichen Anmerkung, es gibt bereits ein interface mit dem Namen ListIterator im gleichen Paket wie die Iterator... so möchten Sie vielleicht einen anderen Namen wählen.
Schreibe einen Kommentar