java For loop simple code - Ergebnisklärung

7

Kann mir jemand erklären, wie dieser Code 8 2 als Ergebnis ausgibt?

%Vor%     
Achini Samuditha 20.12.2012, 15:37
quelle

8 Antworten

3

Wie man unbekannte Codeabschnitte versteht:

  1. Den Code richtig einrücken. Das hilft enorm beim Lesen von Code und es ist eine einfache, sichere Operation, um sich an den Code zu gewöhnen.

  2. Versuchen Sie, einen anderen Weg zu finden, denselben Code einfacher auszudrücken. Führen Sie den Code nach jeder Änderung aus, um sicherzustellen, dass Ihre Änderungen nichts beschädigt haben.

    Dies bedeutet, ++x durch x=x+1 an der richtigen Stelle zu ersetzen.

  3. Entwirre verschachtelte / komplexe if() Bedingungen.

So könnte der umgeschriebene Code so aussehen:

%Vor%

Eine weitere gute Lösung ist der Debugger von arm man:

%Vor%     
Aaron Digulla 20.12.2012, 15:48
quelle
10

In der Iteration 0, 1 ist die Bedingung nicht wahr, also endet sie mit x=2, y=2 .

Ab der zweiten Iteration ist die erste Bedingung ++x>2 wahr, daher wird die zweite nicht erneut ausgewertet. y bleibt auf 2 fixiert. Für jede folgende Schleife wird x zweimal erhöht (nach der Auswertung von ++x>2 , einmal von x++; ). So wird x zu 4, 6 und 8.

    
SJuan76 20.12.2012 15:42
quelle
6

++x ist ein Vorinkrement von x Ihre Bewertung wäre etwas wie unten.

%Vor%     
PermGenError 20.12.2012 15:40
quelle
4

Es geht darum, wie Sie das ++ x / ++ y in der if-Prüfung haben. Folge der Logik:

x = 0 y = 0 z = 0

Dann triffst du die if-Zeile, da ++ x 1 ist, ist es nicht & gt; 2, also läuft der ++ y-Teil, was y = 1 ergibt, das if ergibt einen false und deine Werte sind jetzt:

x = 1 y = 1 z = 0

Iteration 2 passiert, mit z = 1 Dann triffst du die if-Zeile, da ++ x 2 ist, ist es nicht & gt; 2, also läuft der ++ y-Teil, was y = 2 ergibt, das if führt zu false und deine Werte sind jetzt:

x = 2 y = 2 z = 1

Iteration 3 passiert, mit z = 2 Dann triffst du die if-Zeile, da ++ x 3 ist, ist es & gt; 2, also wird x ++ ausgeführt (was x = 4 ergibt), das + y wird NICHT ausgeführt, weil das OR in if wahr war. Die Werte sind jetzt:

x = 4, y = 2, z = 2

Wiederholen Sie dies bis z = 5 und Sie enden mit x = 8, y = 2

    
Michael 20.12.2012 15:44
quelle
1

Erste Ausführung der Schleife

z=0 --> x=1, y=1

z=1 --> x=2, y=2

Für oben ist Bedingung in If falsch.

Beachten Sie auch, dass für jede gültige Ausführung der Bedingung in if x um 2 erhöht wird (Pre-Increment und Post-Increment).

Warum y = 2 blieb gleich ..? Logischer Operator '||' Ausführung, wenn die erste Bedingung wahr ist, wird sie für die andere Bedingung nicht aussehen oder ausführen

z=2 --> x=4, y=2

z=3 --> x=6, y=2

z=4 --> x=8, y=2

x = 8 --- und y = 2

    
VinayVeluri 20.12.2012 15:52
quelle
1

in einer 'if' Anweisung wie folgt:

%Vor%

wenn conditionA () true zurückgibt, conditionB () überhaupt nicht aufgerufen wird, weil keine Notwendigkeit besteht, muss die ganze if-Anweisung true sein.

im Detail: Die Schleife wird 5 mal ausgeführt.

1. Mal: ​​x und y werden in der if () -Anweisung auf 1 erhöht.

2. Mal: ​​x und y werden in der if () -Anweisung auf 2 erhöht.

3. Mal: ​​x inkrementiert auf 3, und das genügt, um die Ausführung des Inneren des 'if' Blocks auszulösen. y wird nicht erneut inkrementiert, da der Ausdruck nach dem || nicht ausgewertet werden muss (ODER) wenn der erste Teil wahr ist.

4. Mal: ​​x inkrementiert auf 5, wenn () immer noch wahr, also wird das x wieder auf 6 erhöht.

5. Mal: ​​x in if () und 7 im Block auf 7 erhöht.

Endergebnis: x ist 8, y ist 2.

    
NickJ 20.12.2012 15:53
quelle
0

For Schleife ausführen 5 mal .. Wenn es kommt, wenn x und y wird um 1 für die ersten 2 mal inkrementieren. in der Zeit x & amp; y sind 2, aber die If-Bedingung nicht erfüllt. Beim 3. Mal wird x 3 und es wird nicht überprüft, damit y nicht erhöht wird und es wird nach innen gehen, wenn und inkrementieren. Also wird y 2 sein. Aber x wird um 2 * 2 = 4 mal erhöht, also x = 8 und y = 2

    
Kanagaraj M 20.12.2012 15:48
quelle
0

Da sich die System.out.println () -Anweisung außerhalb der Schleife befindet, wird die println-Anweisung nur einmal ausgeführt. Bei jeder Schleifeniteration prüft die if-Anweisung, ob die Werte von x und y größer als 2 sind. Zunächst werden jedoch beide Werte erhöht. Die ersten 3 Male durch die Schleife sind die Bedingungen nicht erfüllt, aber x und y werden noch inkrementiert. Jedes Mal danach werden x und y um eins erhöht; Da die Bedingung jedoch erfüllt ist, wird x um eine zusätzliche Zeit erhöht. Kurz gesagt, so sehen x und y nach jeder Iteration aus:

%Vor%

EDIT: Aufgrund der Kurzschlusslogik in der if-Anweisung (||) wird nur der erste Teil des Ausdrucks ausgewertet und y wird nicht inkrementiert. Infolgedessen würde y einfach bei 2 bleiben.

    
APerson 20.12.2012 15:46
quelle

Tags und Links