OOP Über eine doppelt verkettete Liste iterieren

Butterbrot

Aktives Mitglied
Morgen Community,

also folgendes. Ich habe eine Liste implementiert und möchte nur schrittweise über sie iterieren. Dazu habe ich folgenden Iterator mit ein paar Methoden geschrieben.

Java:
private class AuDListIterator<E> implements Iterator<E>{

        private Item nextElement;

        private AuDListIterator(){
            nextElement = head;
        }

        public boolean hasNext(){
            if(nextElement.next != null){
                return true;
            }
            else{

                return false;
            }
        }

        @Override
        public E next() {

            nextElement = nextElement.next;
            return (E) nextElement;

        }

        public void remove() throws UnsupportedOperationException{
            throw new UnsupportedOperationException();
        }


        public Iterator<E> iterator() {
            return  iterator();
        }
    }

Ich gehe davon aus, dass dieser weitgehend in Ordnung ist, bis auf die "iterator" Methode. Dort sollte ich nämlich den neu konstruierten AuDListIterator zurückgeben. Und da so, Eclipse keine Fehlermeldung zurückgibt, habe ich es vorerst dabei belassen. Das ist aber nicht meine Frage. Die eigentliche Frage ist, wie ich denn nun diesen Iterator testen kann. Ich muss nun testen ob eine foreach Schleife funktioniert. Das habe ich auch versucht, sieht folgendermaßen aus:

Java:
AuDList<Integer> audlist = new AuDList<Integer>();

        audlist.add(new Integer(4));
        audlist.add(new Integer(3));
        audlist.add(new Integer(5));
        audlist.add(new Integer(1));
        audlist.add(new Integer(2));
        audlist.add(new Integer(6));
        //

for (Integer element : audlist) {
            System.out.println(element);
        }

Ich habe es auch mit anderen Arten von Schleifen versucht, aber ich erhalte meist einen NullPointer. Nun weiß ich leider nicht wo mein Fehler liegt. Entweder im Iterator oder an der Vorgehensweise, um den Iterator zu test. Würde mich über jeden Tipp freuen und danke im Voraus.

Gruß
 
Die iterator methode hat nichts im iterator selbst zu suchen.
Die iterator methode kommt in deine Liste, welche Iterable implementiert. Und diese soll dann eine neue Instanz deines Iterators zurückliefern.
Erbt deine Liste auch von iterable? zeig mal die iterator methode deiner Liste.
 
Die Aufgabe stammt von HIER.

Ich kann dir sagen, dass dein Iterator falsch ist. Ich würde auch eine Instanz einer anonyme Klasse zurückgeben die dann so aussieht:
Java:
@Override
public Iterator<E> iterator() {
   return new Iterator<E>() {
    
     private Item cur = head;
    
     @Override
     public boolean hasNext() {
       return cur != null;
     }
    
     @Override
     public E next() {
       E value = cur.value;
       cur = cur.next;
       return value;
     }
   };
}
 
Zuletzt bearbeitet:

Zurück
Oben