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
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.
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.
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.
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
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
Eigentlich müsste 24 ausgegeben werden
Links ist doch Java und rechts Python oder?
Ne, 11 wenn ich mich nicht verzählt habe... Ist ja > bzw < und nicht >= bzw. <= ;-)
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?