Wie löst man diese JAVA Aufgabe?

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.

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?

0
@valult

Einfach mal als Tabelle:

i    j    i*j    result
-----------------------
3    0     0     0
3    1     3     3
3    2     6     9
2    0     0     9
2    1     2     11
1
@valult

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.

0

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

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich

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. <= ;-)

1