Was ist das Unterschied zwischen die while und die for schleifen in java?
Hallo Freunde.
Mir ist etwas aufgefallen und zwar es gibt eigentlich kein Unterschied zwischen die for und while schleifen in java außer dass, bei for die Initialisierung in der Schleife drin ist und beim while alleine. Also ich bin auch ein Anfänger in dem Bereich deswegen frage ich euch gibt es andere Unterschiede ?
und wenn Nein wozu könnte das nützlich werden dass, man in der Schleife initialisiert ?
danke in voraus
Das Ergebnis basiert auf 9 Abstimmungen
6 Antworten

"for" erlaubt eine kompakte, lesbare Darstellung von "Zählschleifen": ich kann in einer Zeile übersichtlich die Initialisierung, das Weiterdrehen der Indexvariable sowie die Abbruchbedingung schreiben. Der Lebenszyklus der Indexvariable(n) ist damit auch automatisch auf die Schleife begrenzt, was meistens erwünscht ist.
Natürlich kann ich das genausogut mit while nachbilden, es ist eben weniger übersichtlich. Die beiden Schleifentypen sind prinzipiell gleichwertig, aber werden jeweils dort verwendet, wo sie übersichtlicher sind. Habe ich gar keine Indexvariable, ist for unnötig.

For-Schleifen sind typische Zählschleifen. Sie sind so aufgebaut, dass leicht über ein Index gelaufen werden kann.
While-Schleifen nimmt man lieber bei Abbruchbedingungen, die nicht an einem Zähler geknüpft sind, zum Beispiel beim zeilenweise Lesen einer Datei oder aus der Datenbank oder um Menüs zu realisieren (früher).
Eine While-Schleife lässt sich auch als For-Schleife schreiben (vis versa), aber dafür muss man sich etwas verbiegen.

Eine Whileschleife erwartet einen boolen, das heißt du könntest zum Beispiel als boolean true übergeben. Das wäre zwar relativ sinnlos, jedoch würde die whileschleife sange ausgeführt werden, bis true nichtmehr true ist.
Bei einer Forschleife iterierst du durch etwas beliebes. Meistens durch eine Liste, also du iterierst bis du fertig mit der Liste bist. Oder mit einem Set etc.
Du kannst eine Forschleife auch als Whileschleife nutzen, dazu eignet sie sich jedoch weniger. (dafür gibt es nämlich die Whileschleife)

Prinzipiell sind while- und for-Schleifen äquivalent und können ineinander umgewandelt werden.
Denn folgende for-Schleife
for (statement1; statement2; statement3) {
// code
}
ist gleich zu
statement1;
while(statement2) {
// code
statement3;
}
In der Regel nutzt man die For-Schleife, wenn man die Anzahl der Durchläufe schon kennt (z.B. iterieren über eine Liste) - denn hier hast du dann die entsprechenden Bedingungen alle im Schleifenkopf, was der Übersicht hilft
Anmerkung: DU kannst auch statement1, statement2 und statement3 in der for-Schleife weglassen und NUR die Semikolons schreiben, also for(;;) - das wäre dann äquivalent zur while(true)-Schleife ...

Mit einer While-Schleife kannst du z.B. auch Strings miteinander vergleichen und schauen ob die gleich sind oder nicht. Mit einer For-Schleife kannst du das nicht. Die For-Schleife eignet sich nur, wenn du einen bestimmten Anfangs- und einen Endwert hast bis dem du die Schleife ausführen willst. Ich persönlich benutze die For-Schleife kaum.

For-Schleifen sind doch Zählerschleifen wie willst du das Strings miteinander vergleichen? Also ich meine, dass man eine While-Schleife so lange durchführen lassen kann bis die beiden Strings gleich sind oder eben nicht. Und das Gleichheit oder die Ungleichheit sind das Abbruchkriteritum. Wie willst du das mit einer For-Schleife realisieren?

Eine for-Schleife wird zwar per Konvention meist als Zählschleife verwendet, muss es aber nicht. Hier ist die Spezifikation: https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14
Und das hier ist völlig legaler Code:
String eingabe = "bla";
for (;!eingabe.equals("ende");) {
// eingabe
}

Oh das wusste ich garnicht. Dann hast du natürlich Recht. Das hab ich halt so noch nie gesehen.

Sieht man auch nicht allzu oft, aber manchmal ist es tatsächlich sinnvoller und lesbarer, für nicht-indexierende Schleifen ein for zu verwenden.

man kann auch for(;;) für einen Dauerloop eingeben, aber das wird mitunter als stilistisch nicht akkurat beurteilt. Und manche Kurse an den Unis geben zumindest im imperativen Bereich Abzüge und halten an der Regel fest, keine Veränderung der Zählvariabel innerhalb von for. Es geht viel, im Implementierungsteil von for kann ich ein ganzes Programm reinschreiben (wenn es in Java auch den Komma-Operator gibt), vielleicht auch for komplett mit Lambdas füllen etc., irgendwann ist es aber eine Frage der Lesbarkeit
Und manche gehen - wie gesagt - davon aus, dass die" Zähl"-Variable in for nicht innerhalb des Blocks variiert wird - ist aber Ansichtssache.
Natürlich kann man das.