Array Ausgabe bei Verwendung von 2 Schleifen erklären

xxwishxx

Mitglied
Hallo zusammen,

ich habe eine Frage und zwar habe ich ein Array deklariert und Initialisiert mit der Länge 7.

Ursprünglich wollte ich ich mir die größte Zahl ausgeben lassen und beim "experimentieren" habe ich auf einmal verzweifelt gemerkt, dass ich die Ausgabe dieser Schleifen nicht nachvollziehen kann.

Java:
	int groesste =0;
	for(int i = 0; i< list.length; i++){
        for(int j= 0; j<i; j++){
	    groesste ++;
	}
	   System.out.println(groesste);
	}

Als Ausgabe habe ich dann da bekommen :
0
1
3
6
10
15
21

Vielleicht kann mir kurz einer erklären wie der Compiler auf diese Ausgabe kommt, das wäre super.

Beste Grüße 🙂
 
Zuletzt bearbeitet von einem Moderator:
Du hast eine äußere Schleife, in der Du die Größe eines Arrays durchläufst und in der Inneren
Code:
groesse
so lange um eins erhöht, wie
Code:
j < i
(count der äußeren Schleife) ist.
 
Ja aber zuerst wird in der ersten for-schleife die Bedingung überprüft, ob i =0 kleiner als die länge des arrays ist.
Dies ist ja der Fall, also gehen wir in die inner Schleife.

Weil j auch 0 ist, ist j ja nicht kleiner i also wird groesste als 0 ausgegeben.

Dan geht man wieder in die erste Schleife und i wird um eins erhöht. Also steht i auf 1 ! Wir überprüfen ob 1 kleiner als 7 ist. Trifft zu also springen wir in die zweite for-Schleife.

Das j steht immer noch auf null und null ist kleiner als 1 (i) also wird jetzt groesste um eins erhöht.
So bekommen wir die 1 als Ausgabe...

Aber wie kommt man auf die 3 ?
 
Ja, das ist auf den ersten Blick nicht zu durchschauen.
Habe dein Programm mal modifiziert.
Jetzt solltest du die Ausgaben nachvollziehen können.
Java:
public class SchleifenTest {
    public static void main(String[] args) {
        int[] list = new int[7];

        int groesste = 0;
        for(int i = 0; i < list.length; i++) {
            System.out.println("{  Betreten der äußeren Schleife...");
            System.out.println("   Zähler i hat den Wert "+i);
            System.out.println("   groesste hat den Wert "+groesste);
            System.out.println();
            for(int j = 0; j < i; j++) {
                System.out.println("   {  Betreten der inneren Schleife...");
                System.out.println("      Zähler j hat den Wert "+j);
                System.out.println("      groesste hat den Wert "+groesste);
                groesste ++;
                System.out.println("      groesste wurde soeben inkementiert!");
                System.out.println("   }  Verlassen der inneren Schleife.");
                System.out.println();
            }
            System.out.println("   "+groesste+" <- deine Ausgabe");
            System.out.println("}  Verlassen der äußeren Schleife.\n");
        }
    }
}
 
Vielleicht doch noch einmal eine kurze Verständnisfrage ???:L

Warum wird die innere for schleife denn immer wieder auf null gesetzte? und bei der Ausgabe 3, wird ja zunächst erst einmal 2 mal hintereinander groesste inkrementiert, müsste nicht erst eine Ausgabe nach der ersten inkrementierung folgen und dann wieder die nächste Inkrementierung?

Oder gibt es erst eine Ausgabe, sobald die Bedingung nicht mehr gegeben ist?
 
Vielleicht doch noch einmal eine kurze Verständnisfrage ???:L

Warum wird die innere for schleife denn immer wieder auf null gesetzte?
Wenn die innere Schleife abgearbeitet wurde, wird sie verlassen und der Code der äußeren Schleife weiter abgearbeitet.
Bei jedem weiteren Durchlauf der äußeren Schleife wird auch wieder die innere Schleife erreicht und durchlaufen. Hier wird wieder die Schleife initialisiert, daher steht wieder alles auf 0.
 

Neue Themen


Zurück
Oben