Wie löst man diese JAVA Aufgabe?
Kann mir wer erklären, wie der Rückgabewert 11 sein kann? Wie würde ich dieses Beispiel bearbeiten?
5 Antworten
![](https://images.gutefrage.net/media/user/ArchEnema/1444744974_nmmslarge.jpg?v=1444744974000)
Die äußere for-Schleife zählt i runter, angefangen bei input, bis 2. Beim Aufruf mit dem Wert 3 haben wir also zwei Durchläufe, einmal mit i=3 und dann mit i=2.
Die innere Schleife zählt j hoch, von 0 bis (ausschließlich) i. Also zunächst (erster Durchgang äußere Schleife) von 0 bis 2, und dann (zweiter Durchgang äußere Schleife) von 0 bis 1.
Es wird jeweils das Produkt von i und j auf das Endergebnis addiert. Also:
0 + 3*0 + 3*1 + 3*2 + 2*0 + 2*1
Das ergibt für mich 3 + 6 + 2, und somit 11.
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Du startest zunächst in der main-Methode. Dort wird die Funktion magic aufgerufen und ihr der Wert 3 als Argument übergeben. Das heißt, du hüpfst nun in die Definition dieser Funktion, setzt den Parameter mit den Wert 3 und läufst den restlichen Programmcode ab. Dabei heißt es nur Werte einsetzen und ein bisschen Kopfrechnen.
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Wenn sich die erste Schleife im ersten Schritt befindet, wird zunächst ihr kompletter Körper einmal ausgeführt. Das heißt auch, dass die innere Schleife erst einmal komplett durchläuft. Von 0 bis 3 (denn i = 3 im ersten Durchlauf der äußeren Schleife). Wenn sie fertig ist, startet erst der zweite Durchlauf der äußeren Schleife. In diesem Durchlauf startet die innere Schleife wieder, diesmal rennt sie von 0 bis 2.
Zur visuellen Darstellung könntest du dir auch dieses Programm einmal ausführen lassen:
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
System.out.print(j + " ");
}
System.out.println();
}
Ausgabe:
0 1 2
0 1 2
Immer wenn die innere Schleife fertig mit ihrer Ausführung ist, wird in der inneren Schleife noch ein Zeilenumbruch eingefügt.
![](https://images.gutefrage.net/media/default/user/6_nmmslarge.png?v=1438863662000)
links:
am Anfang input = 3, result = 0
die erste Schleife startet somit mit i=input=3 und geht auf 2, denn dann ist i nicht mehr größer 1, also zwei Durchläufe der äußeren Schleife, weil i in den Schleifen nicht modifiziert wird.
Die innere Schleife geht jeweils von 0 bis exklusive i, also beim ersten mal von 0 bis 2 (das sind 3 Durchläufe), dann von 0 bis 1 (das sind 2 Durchläufe).
Somit beim ersten äußeren Durchlauf i=3:
result = 0, i = 3, j = 0 ==> result bleibt bei 0 (da i*j=3*0=0)
result = 0, i = 3, j = 1 ==> result wird 0 + 3 = 3
result = 3, i = 3, j = 2 ==> result wird 3 + 3*2 = 9
beim zweite äußeren Durchlauf i=2:
result = 9, i = 2, j = 0 ==> result bleibt bei 9 (da i*j=2*0=0)
result = 9, i = 2, j = 1 ==> result wird 9 + 1*2 = 11
rechts: dito
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Hier die Lösung.
Fall i=3
Die j-Schleife wird von 0 bis 2 durchlaufen
j=0
res +=3*0
j=1
res +=3*1
j=2
res +=3*2
--> 9
Fall i=2
Die j-Schleife wird von 0 bis 1 durchlaufen
j=0
res +=2*0
j=1
res +=2*1
--> 11
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Eigentlich müsste 24 ausgegeben werden
Links ist doch Java und rechts Python oder?
![](https://images.gutefrage.net/media/user/markb1980/1681139302408_nmmslarge__48_125_295_295_4c6a09f2bf04e2cbd5d90baed9bca973.jpg?v=1681139302000)
Ne, 11 wenn ich mich nicht verzählt habe... Ist ja > bzw < und nicht >= bzw. <= ;-)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Also dann hätte ich in der ersten Runde i = 3 und j = 0 und result wäre dann 0 oder?
In der zweiten runde wäre i = 2 und j = 1 und result 2 ?
und aber der dritten Runde stimmt die Bedienung nicht mehr weil i=1 und 1 ist nicht größer als 1?