Java For Schleife Klammer setzung?

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ß

Woher ich das weiß:Berufserfahrung

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.

Woher ich das weiß:Studium / Ausbildung – Studium Informatik / Softwaretechnik
electroball12 
Fragesteller
 21.06.2020, 23:04

Ich habe hier das Bild hochgeladen aber wieso sind es da mehrere anweisungen und es geht trotzdem http://prntscr.com/t3xahe

0
msmw22  21.06.2020, 23:06
@electroball12

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.

1
codinghelp  21.06.2020, 23:07
@electroball12

In der 1. Schleife ist nur eine Weitere, in der 2. ist nur eine if Abfrage. Jeweils nur eine Anweisung, aber halt verschachtelt

0

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;
jort93  22.06.2020, 01:43

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;
0

Wenn in der Schleife genau eine Anweisung steht, kannst du die geschweiften Klammern weg lassen. Ist wie bei if