Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich bin in meinem Online Java Kurs gerade bei den iterator angekommen, wenn man diesen in einer while Schleife ausführt, springt der iterator ja immer weiter so lange hasNext() true ausgibt, beim letzten Objekt wird dann ein false ausgegeben. Das funktioniert bei mir auch alles super. Wenn ich allerdings statt der while schleife, die Befehle einzeln schreibe (also z.b 5x) wird immer true ausgegeben, auch wenn meine an den Iterator übergebene liste nur 4 Objekte besitzt. Warum springt dann der Iterator nicht weiter und gibt nach 4 Elementen false aus?
Liebe Grüße Niklas.
Das sollte er eigentlich tun, wenn du halt 5x .hasNext()und.next() aufrufst. Und, wenn der Iterator gut geschrieben ist und er genau 5 Elemente hat, dann reicht auch 5x .next() aufzurufen (ohne .hasNext()). Ein anschließender .hasNext() Aufruf sollte dann false liefern.
Es ist etwas verwirrend im ersten Moment, also next liefert das naechste Element, was aber eigentlich das aktuelle Element ist fuer unsere Logik. Nehmen wir an wir haben eine Liste mit drei Elementen:
Code:
0: A
1: B
2: C
Jetzt haben wir folgenden Code:
Java:
while(iterator.hasNext()) {
current = iterator.next();
}
Was jetzt passiert ist, dass der Iterator nach der Erstellung nicht am ersten Element steht, sondern davor.
Code:
Initial:
-->
0: A
1: B
2: C
Wenn jetzt die while das erste mal betreten wird, wird geprueft ob es ein naechstes Element gibt, also ein Element an Position "0", und das gibt es. Mit next wird der Zeiger dann auf diese neue Position geschoben und das Element zurueck geliefert. Das sieht dann in etwa so aus:
Code:
-->
0: A
1: B
2: C
1: iterator.hasNext() == true
-->
0: A
1: B
2: C
1: iterator.next() == "A"
-->0: A
1: B
2: C
2: iterator.hasNext() == true
-->0: A
1: B
2: C
2: iterator.next() == "B"
0: A
-->1: B
2: C
3: iterator.hasNext() == true
0: A
-->1: B
2: C
3: iterator.next() == "C"
0: A
1: B
-->2: C
Ab dem dritten Durchlauf liefert hasNextfalse da es kein Element an "3" Position gibt. Ein Aufruf von next wuerde einen Fehler liefern, weil es keine naechstes Element mehr gibt.
Ja, es ist auch eine super Fingerübung, mal einen eigenen Iterator zu schreiben. Just for fun. Z.B. einen für eine Traversierung durch einen Baum.
Oder einfach nur einen, der alle ganzen Zahlen in einem Intervall generiert.
Es ist etwas verwirrend im ersten Moment, also next liefert das naechste Element, was aber eigentlich das aktuelle Element ist fuer unsere Logik. Nehmen wir an wir haben eine Liste mit drei Elementen:
Code:
0: A
1: B
2: C
Jetzt haben wir folgenden Code:
Java:
while(iterator.hasNext()) {
current = iterator.next();
}
Was jetzt passiert ist, dass der Iterator nach der Erstellung nicht am ersten Element steht, sondern davor.
Code:
Initial:
-->
0: A
1: B
2: C
Wenn jetzt die while das erste mal betreten wird, wird geprueft ob es ein naechstes Element gibt, also ein Element an Position "0", und das gibt es. Mit next wird der Zeiger dann auf diese neue Position geschoben und das Element zurueck geliefert. Das sieht dann in etwa so aus:
Code:
-->
0: A
1: B
2: C
1: iterator.hasNext() == true
-->
0: A
1: B
2: C
1: iterator.next() == "A"
-->0: A
1: B
2: C
2: iterator.hasNext() == true
-->0: A
1: B
2: C
2: iterator.next() == "B"
0: A
-->1: B
2: C
3: iterator.hasNext() == true
0: A
-->1: B
2: C
3: iterator.next() == "C"
0: A
1: B
-->2: C
Ab dem dritten Durchlauf liefert hasNextfalse da es kein Element an "3" Position gibt. Ein Aufruf von next wuerde einen Fehler liefern, weil es keine naechstes Element mehr gibt.