2016-05-01 16 views
1

Ich bin ein Intro Java Student, und ich studiere für eine Abschlussprüfung. Ich gehe über ein vorheriges Quiz auf Wiederholungs-Schleifen, und sehe eine Antwort, die ich falsch verstanden habe und für das Leben von mir nicht herausfinden kann, warum die Antwort so ist, wie es ist.Verschachtelte Schleife Klärung - Bearbeitet

Kann mir bitte jemand sagen, warum z = 29 im folgenden Fall (und nicht 25)? Mein Professor hat es falsch angemerkt, dass es 29 war, aber ohne Erklärung.

int z = 0; 
for(int x=0; x<5;x++){ 
    for(int y=0; y<5;y++){ 
     z++; 
    } 
    z++; 
} 

z--; 

Der einzige Weg, ich war in der Lage 29 durch die innere Schleife zu bekommen war die Ausführung 5 Zeiten (gleiche deshalb für äußeree Schleife, 5*5=25 plus 4 ?? Auch habe ich ausgeführt dies in meinem IDE und die Konsole dieses gedruckt wenn ich system.out.println(z); versucht

4 
8 
12 
16 
20 

(so bin ich jetzt ziemlich verwirrt) würde Jede Hilfe Sie bieten könnte sehr geschätzt.

+0

Sind Sie sicher, dass die Auszeichnungen richtig geschrieben? Diese haben eine wichtige Auswirkung ... Wenn möglich, können Sie den Auftrag scannen? –

+3

20 ist definitiv die richtige Antwort für das gegebene Programm, aber vielleicht haben Sie ein paar Details vergessen. –

+0

z würde nicht 25 oder 29 betragen. Es würde 20 ergeben. Wenn Sie Ihre System.out.println außerhalb der Schleifen verschoben, würde es nur den letzten Wert drucken: 20. Sie führen eine Schleife 5 mal aus, die führt 5 mal eine Schleife aus. 5x5 = 25. Subtrahieren eines für jede 5 Sie hinzufügen, 5x5 - 5 = 20. – user2651804

Antwort

1

Ihr Codefragment:

int z = 0; 
for(int x=0; x<5;x++){ 
    for(int y=0; y<5;y++){ 
     z++; 
    } 
    z++; 
} 
z--; 

führt der Tat in z gleich 29 zu sein. Berechnen wir die Differenz für z für jeden Teil. Die innere for -Schleife fünfmal für jede Iteration der äußeren Schleife so:

for(int y=0; y<5;y++){ 
    z++; 
} 

ist im Grunde gleich:

z += 5; 

Damit haben wir das Programm neu schreiben zu:

 
int z = 0; 
for(int x=0; x<5;x++){ 
    z += 5; 
    z++; 
} 
z--; 

Jetzt z += 5; und z++ entspricht z += 6;. Wir schreiben das Programm:

 
int z = 0; 
for(int x=0; x<5;x++){ 
    z += 6; 
} 
z--; 

Die for Schleife wieder fünfmal wiederholt, um das Update für z ist: z += 5*6; oder z += 30;. Wir schreiben das Programm:

 
int z = 0; 
z += 30; 
z--; 

Endlich haben wir die drei Erklärungen zu einer Einheit verschmelzen: int z = 0+30-1; oder

 
int z = 29; 
+0

Danke, Willem, ich schätze wirklich die ausführliche Antwort hier! Wenn es wieder auf das Finale kommt, werde ich dafür bereit sein :) – PKM357

0
int z = 0; 
// iterate 5 times 
for(int x=0; x<5;x++){ 
    // iterate 5 times 
    for(int y=0; y<5;y++){ 
     // z=z+1 
     z++; 
    } 
    // z=z-1 
    z--; 
} 

Mathematisch z = 5 * (5 * (+ 1) -1)

dann z = 20

0

Es läuft durch die innere Schleife 5 mal für jedes Inkrement in x. Und für jeden Zuwachs von x .. Hinzufügen von bis zu insgesamt 5 mal ... es subtrahiert ein ...

Daher

5 * (5 + 1) -1 = 29.

Die Antwort ist 20 nicht 29. Es sei denn, Sie haben einen Tippfehler.

+0

'5 * 5-1'? Bitte setzen Sie Klammern über '5-1' ... –

+0

Gott sei Dank haben Sie das gefangen. Bearbeitet. – DarkV1

+0

Ich hatte einen Tippfehler. Ich entschuldige mich dafür! – PKM357

0

Sind Sie sicher, ist 29 und nicht 20? Professoren können manchmal irreführende Schreibstile haben.

Die Antwort auf die Frage sollte 20

int z = 0; 
for(int x=0; x<5;x++) //0 1 2 3 4 this loop will run 5 times 
{ 
    for(int y=0; y<5;y++)//0 1 2 3 4 this loop will run 5 times 
    { 
     z++; 
    } 
    z--; 
} 

Antwort ist sein: - z = 5 * z = äußeren Schleife * (Dekrement innere Schleife) (5 - 1) z = 20

0

Die richtige Antwort ist 20. Vielleicht seine 20 sah aus wie 29 beim Markieren.

+0

nur aktualisierten Code, sehr Entschuldigung für den Fehler! – PKM357

0

bei jeder Iteration der inneren für um 1

Jedes Mal, wenn die innere Schleife Schleifen fünfmal für Schleifen z nimmt mit jeder Iteration der Außen um 1 erhöht sich z Schleife wird z um fünf inkrementiert.

Jedes Mal, wenn die äußere Schleife eine Schleife abschließt, wird z um eins dekrementiert, und die innere Schleife wird fünfmal wiederholt. Daher wird z mit jeder Iteration der äußeren Schleife um 4 erhöht.

Die äußere Schleife Schleifen fünfmal => (z + = 4) * 5 => z = 20

Edited

bei jeder Iteration der inneren for-Schleife Z um 1 erhöht.Bei jeder Iteration der äußeren for-Schleife (ohne die innere Schleife) erhöht z auch um 1.

Jedes Mal, wenn die innere Schleife fünfmal wiederholt wird, wird z um fünf erhöht.

Jedes Mal, wenn die äußere Schleife eine Schleife abschließt, wird die innere Schleife fünfmal wiederholt und z wird um eins erhöht, daher wird bei jeder Iteration der äußeren Schleife in Schritten von 6 inkrementiert.

Die äußere Schleife Schleifen fünfmal => (z + = 6) * 5 => z = 30

Und schließlich, subtrahiert man eine ganz am Ende, unabhängig von den Schlaufen => z = 30-1 =

+0

Entschuldigung, ich habe den Code neu geschrieben, mein Fehler, kannst du neu bewerten, ob es tatsächlich 29 ist? – PKM357

+0

@ PKM357 Es gibt die überarbeitete Antwort – hjl

Verwandte Themen