Geschachtelte For schleife

Rallenaldo

Mitglied
Hallo.

Ich habe mal eine Frage zum "Geschachtelte Schleifen" Beispiel aus dem Java ist auch eine Insel Buch.

Java:
for ( int i = 1; i<=5; i++)
	{
		for (int j=1; j<=i; j++)
			System.out.print("*");
		System.out.println();

Es werden jetzt Sternen ausgegeben. In der ersten Zeile 1 und dann je Zeile ein Sternchen mehr. Meine Frage ist nur, wieso?

Ich steig nicht so ganz durch, wieso sich die Anzahl der Sternchen pro Zeile um 1 erhöhrt. Ist es denn generell so, dass die Anweisung nach dem Schleifenkopf (System.out.print("*") sich auf die Variable bezieht, die im Schleifenkopf angegeben wird?

In diesem Fall würde "*" der Variablen "J" zugewiesen. Scheint mir auch die einzige logische Erklärung. Würde darin aber gerne bestätigt werden, nicht dass ich falsch liege und ich es mir dann falsch merke
 
Die innere Schleife iteriert von 1 bis i, was bedeutet, dass sie von dem Wert von i aus der äußeren Schleife abhängt. Die Schleife außen iteriert von 1-5, d.h. bei jedem Inkrement von i in der äußeren Schleife wird i auf j referenziert und die innere Schleife läuft j mal (i mal durch).

Was dann entsprechend folgendes gebilde ergibt

Code:
*

**

***

****

*****
 
Zuletzt bearbeitet:
Grundsätzlich sollte man bei If-Anweisungen und Schleifen immer mit den Klammern arbeiten
Code:
{}
ich hab das nun mal ergänzt evtl. wird es dadurch bereits klarer.

Java:
for ( int i = 1; i<=5; i++)
        {
            for (int j=1; j<=i; j++){
            	System.out.print("*");
            }
            System.out.println();
            
        }

Es ist so, dass die innere Schleife von der äußeren abhängt, also hängt j von i ab. Der * wird nirgendwo zugewiesen, der wird nur ausgegeben. 🙂

Wenn sich die äußere Schleife erhöht, erhöht sich auch automatisch die Anzahl der ausgegebenen * wenn die innere Schleife dann wieder "fertig ist" wird ein Zeilenumbruch gemacht und man macht wieder bei der äußeren weiter, solange die Bedingung wahr ist natürlich.
 
Also heißt das quasi ungefähr so:

Beim 1. Durchlauf sind i und j "1" --> 1x "*" ausgeben
Beim 2. Durchlauf sind i und j "2" --> 2x "*" ausgeben
Beim 3. Durchlauf sind i und j "3" --> 3x "*" ausgeben
Beim 4. Durchlauf sind i und j "4" --> 4x "*" ausgeben
Beim 5. Durchlauf sind i und j "5" --> 5x "*" ausgeben
 
Ziemlich ungenau beschrieben.

Deine Schlussfolgerung ist richtig. Der Stern wird unterschiedlich oft geschreiben.

Aber die Ursache ist nicht, dass i und j "4" sind.

Du hast eine Schleife, die von 1...5 geht.

und eine zweite, die von 1...j geht.

Die äßere schleife sagt der innteren, wie oft sie laufen soll.

GGF. würde ich mir mal eine Tabelle machen und den Code zeile für Zeile durchgehen und mir aufschreiben welche Variable wann welchen wert hat.

Gruß,

Martin
 
Jetzt verwirrst du mich 😀

durch i++ und j++ wird i und j doch immer um eins erhöht. Da beide bei 1 starten, haben sie doch den gleichen Wert.

Das heißt doch in diesem beispiel, dass die Anzahl der Sterne der Anzahl der Durchläufe entspricht?
 
Viel zu ungenau.

Natürlich entspicht die Anzahl der Sterne der Anzahl der Durchläufe. Aber welche Schleife meinst du? Die innere oder äußere?

und i und j haben prinzipiell nix gemeinsam.

i steigt um 1

und j von 0 ... i!

Wenn i = 2;

dann war j = 0, 1 und nochmal 0,1,2 ....
 
Ja, i und j werden immer um 1 erhöht, aber - wie Marcinek erklärt hat - nicht gleichzeitig und j wird bei Beginn jedes Durchlaufs der äußeren Schleife auf 1 gesetzt:

Code:
i=1, j=1: System.out.print("*") --> "*" ausgeben
          System.out.println() --> neue Zeile
i=2, j=1: System.out.print("*") --> "*" ausgeben
i=2, j=2: System.out.print("*") --> "*" ausgeben
	  System.out.println() --> neue Zeile
i=3, j=1: System.out.print("*") --> "*" ausgeben
i=3, j=2: System.out.print("*") --> "*" ausgeben
i=3, j=3: System.out.print("*") --> "*" ausgeben
	  System.out.println() --> neue Zeile
i=4, j=1: System.out.print("*") --> "*" ausgeben
i=4, j=2: System.out.print("*") --> "*" ausgeben
i=4, j=3: System.out.print("*") --> "*" ausgeben
i=4, j=4: System.out.print("*") --> "*" ausgeben
	  System.out.println() --> neue Zeile
i=5, j=1: System.out.print("*") --> "*" ausgeben
i=5, j=2: System.out.print("*") --> "*" ausgeben
i=5, j=3: System.out.print("*") --> "*" ausgeben
i=5, j=4: System.out.print("*") --> "*" ausgeben
i=5, j=5: System.out.print("*") --> "*" ausgeben
	  System.out.println() --> neue Zeile
 
Ich glaub jetzt hab ichs verstanden.

Die äußere Schleife hat insgesamt 5 Durchgänge.

Beim 1. Durchgang wird die innere Schleife so lange ausgegeben bis "j" gleich "i" ist. Das heißt in diesem Fall, dass einmal ein "*" ausgegeben wird.

Beim 2. Durchlauf startet es vom neuen und die innere Schleife läuft nun bis 2, da i ja 2 ist.

Also folgendes:

*
**

Beim dritten durchlauf sieht das dann so aus:

*
**
***

So richtig?
 

Zurück
Oben