for Schleife, gleiches ergebnis mit und ohne {}

poolk

Mitglied
Schon wieder ich.

Java:
class MultifFor {
  public static void main (String [] args)
  {

  for(int x =0; x < 4; x++)

  {
  for(int y = 4; y > 2; y--)
  {                                              //Klammer 1
  System.out.println(x + " " + y);
  }                                              //Klammer 2, beide entfernen gleiches Ergebnis?
  {
  if (x ==1)
  {
  x++;
  }
  }
  }
  
  }
}

wenn man in dieser Übung die Klammern entfernt ergiebt sich das gleiche Ergebnis wie mit. Wieso ist das so? In dieser Klammer müsste doch Auswirkungen auf die y-Schleife haben?

Die Lösung ist mit Klammern, aber wieso geht es auch ohne?

Gruss
 
Ist doch nur ein Statement innerhalb der Klammer, also machts dann kein unterschied. In der Lösung stehts mit Klammern vermutlich, weil`s so die Code Conventions vorgeben - IMMER Klammern benutzen am Besten!
 
Java:
		for (int x = 0; x < 4; x++){
			for (int y = 4; y > 2; y--) {
				System.out.println(x + " " + y);
			} 
			
			if (x == 1) {
				x++;
			}
		}
Java:
		for (int x = 0; x < 4; x++){
			for (int y = 4; y > 2; y--)
				System.out.println(x + " " + y);
			
				if (x == 1) {
					x++;
				}
		}
Zwischen den beiden Versionen gibts doch keinen unterschied.
 
Weil du für die Schleife nur eine Anweisung bzw. Zeile hast. Wären es mehr Anweisungen, die innerhalb dieser Schleife ausgeführt werden müssten, müssten Sie mit den Klammern umschlossen werden. Für dein Beispiel brauchst du keine Klammern, wobei ich sie zur Übersicht verwenden würde. Und noch ein Tipp. Strukturiere dein Code besser (Absätze, damit man besser erkennen kann, welche Klammer was beendet)
 
Vielen Dank Rysa. Genau das war die Antwort die ich haben musste (ohne es zu wissen).
Ist es bei allen Schleifen (und sonst noch irgendwo) so, dass man bei nur einer Anweisung keine Klammern bräuchte? Wobei es natürlich nach den Code Conventions immer zu empfehlen ist. Interessant.

Und danke für den Tipp!


Hier noch überarbeitet:

Java:
class MultifFor
{
  public static void main (String [] args)
  {

     for(int x =0; x < 4; x++)
     {
        for(int y = 4; y > 2; y--)

        {
         System.out.println(x + " " + y);
        }

        {
        if (x ==1)
          {
            x++;
          }
        }
     }
  }
}

Danke und gute Nacht 🙂
 
bei der if-abfrage, der for-schleife und der while-schleife gilt, dass immer das nächste Statement betroffen ist.
Will man mehrere statements zusammenfassen nimmt man die { } Klammern.

Deinen Code könnte man auch so schreiben:
Java:
		for (int x = 0; x < 4; x++) {
			for (int y = 4; y > 2; y--)
				System.out.println(x + " " + y);
			if (x == 1) x++;
		}
Natürlich ist der Code aber lesbarer wenn man generell Klammern setzt nach der Schleife/If-Abfrage.
 
for-, for-each-, while-, do-while- usw. -Schleifen sowie switch-Konstrukte. In dem Zusammenhang: Dangling else ? Wikipedia

Bei anderen Sachen (Klassen, Methoden, statischen Blöcken etc.) sind diese NICHT optional.

Die java code conventions sieht vor, diese aus Gründen der Lesbarkeit nicht wegzulassen. Um es zu lernen, finde ich es aber praktisch, mal solchen und solchen Code zu sehen und zu schreiben.

So far.

Best wishes.

anonym
 
UUUnnd bei Nicht-Klammerung bezieht sich die Kontrollstruktur jeweils nur auf genau die nächste nachfolgende Anweisung. Gibt es eine solche nicht, kann anstatt {} in machen Fällen auch ein ; stehen.
 
Nein, eher eine empfehlung von google 😉. Bringe mir Java (mit Buchhilfe) selbst bei, um wieder mal was neues zu lernen. Eclipse kenne ich von einem ganz kurzen intermezzo mit android...

Danke euch allen für die vielen tipps und anregungen. 🙂
 

Zurück
Oben