Java For Schleife Klammer setzung?
Hallo,
Ich lerne gerade Java programmieren und wollte mal etwas Fragen. Man kann die for schleife so schreib for(){} oder man kann sie auch so schreiben for() ohne die geschweiften Klammern was macht das für einen unterschied ?
4 Antworten
Hey electroball12,
guck dir das Beispiel mal an:
class Main {
public static void main(String[] args) {
for (int i=0; i< 100; i++) System.out.println(i);
System.out.println("test");
}
}
Hier wird nur das System.out.println(i); direkt in hinter der for 100 mal ausgeführt.
Die geschweiften Klammern sorgen dafür, dass der gesamte Block innerhalb der geschweiften Klammer ausgeführt werden.
class Main {
public static void main(String[] args) {
for (int i=0; i< 100; i++) {
System.out.println(i);
System.out.println("test");
}
}
}
Hier wird
System.out.println(i);
System.out.println("test");
100 mal ausgeführt.
Das geht übrigens auch für andere Kontrollstrukturen:
if (a < b) System.out.println("something");
//vs
if (a < b) {
System.out.println("something");
System.out.println("something different");
}
Wie Du siehst, kannst Du die Klammern weg lassen, wenn es nur eine Anweisung gibt. Im beruflichen Umfeld werden, meiner Erfahrung nach, immer die Klammern gesetzt. Viel zu leicht schleichen sich sonst Fehler ein, wo Klammern fehlen und man dies nicht erkennt. (Mag da aber auch Unternehmen geben, die das nicht so eng sehen)
Gruß
Eigentlich immer:
for (foo) {
// Code
}
Bei einer if-Answeisung kann man die geschweiften Klammern auch weglassen, wenn es nur eine Anweisung gibt, z.B:
if (foo) return 1;
if (foo) {
// Code
// Code
}
Bei mehr als einer Anweisung im Körper müssen geschweifte Klammern gesetzt sein, dass der Compiler weiß, was dazu gehört.
Sind einfach Syntaxregeln.
Das kann man wahrscheinlich so machen, weil die ganze for-Schleife als "eine Anweisung" angesehen wird.
Ich würde dir aber raten, dir das nicht anzugewöhnen, weil du dadurch auch schnell fehler machen kannst und es nicht so klar strukturiert ist.
In der 1. Schleife ist nur eine Weitere, in der 2. ist nur eine if Abfrage. Jeweils nur eine Anweisung, aber halt verschachtelt
Ich denke man kann das folgendermaßen erklären.
for() führt den nächsten block oder das nächste statement aus.
Ein block sind ein oder mehrere statements in geschwungenen klammern.
Sprich du kannst schreiben
for(foo) i++;
for(foo) {
i++;
}
for(foo); //der durchläuft foo und macht nichts(darum das semicolon), manchmal macht man sowas, aber hier eher nicht sinnvoll.
for(foo) {
i++;
j = i*j;
}
Aber sowas funktioniert nicht(bzw. nicht so wie man erwartet).
for(foo)
i++;
j = i*j;
nochmal als anmerkung zum letzteren, das letzte stück code in der antwort ist äquivalent zu:
for(foo) {
i++;
}
j = i*j;
oder
for(foo) i++;
j = i*j;
Wenn in der Schleife genau eine Anweisung steht, kannst du die geschweiften Klammern weg lassen. Ist wie bei if
Ich habe hier das Bild hochgeladen aber wieso sind es da mehrere anweisungen und es geht trotzdem http://prntscr.com/t3xahe