2016-12-10 3 views
0

Warum ist die Antwort 0 und nicht 1? Ich weiß, dass es etwas mit dem booleschen Satz zu tun hat, aber ich kann nicht herausfinden, wie es funktioniert. Von meinem Verständnis, stoppt die while-Schleife, wenn i und j beide gleich 1.Warum gibt es 0 aus?

public void random(){ 
    int i = 0; 
    int j = 2; 
    int k = 0; 
    boolean keepGoing; 
    keepGoing = i<j; 
    while (keepGoing && k<2) { 
     i++; 
     j--; 
     k++; 
    } 
    System.out.println(j); 
} 

Drucke sind out 0

+0

Debuggen/Schritt durch Ihren Code und es wird klar sein, was passiert. – PeeHaa

Antwort

1

Sie wahrscheinlich sagen, dass, weil Sie die keepGoing Variable denken, wird die Schleife stoppen ... Nun die keepGoing Variable wird sich überhaupt nicht ändern! Sie instanziert Ihre Variable mit diesem:

boolean keepGoing; 
keepGoing = i<j; 

Dieser Ausdruck bei den Werten von i und jin diesem Moment in dem Code aussieht, ersetzt diese Variablen mit ihren Werten (jeweils 0 und 2 in diesem Moment), und verarbeite nur den Vergleich. Als i ist weniger als jzu diesem Zeitpunkt im Code wird True zurückgegeben und keepGoing auf True festgelegt. Danach ändert sich keepGoing nicht jedes Mal i oder j ändert sich. So funktioniert es nicht. Der Wert von keepGoing ändert sich nur, wenn Sie einen anderen Wert eingeben! Im Allgemeinen ändert sich eine Variable nur dann, wenn eine explizite Linie (oder Methode) gefunden wurde, die besagt, dass sie geändert werden soll. Wenn Sie in Ihrem Fall keepGoing ändern möchten, jedes Mal, wenn Sie i oder j ändern, müssen Sie jedes Mal, wenn dies geschieht, die keepGoing explizit neu berechnen. In Ihrem Fall wird dies am Ende Ihres while Block sein:

while (keepGoing && k<2) { 
     i++; 
     j--; 
     k++; 
     keepGoing = i<j; //explicitely recalculate value of keepGoing 
    } 
0

Es ist, weil Sie die int j abnehmen und die int k erhöht.

Die während die Schritte wie folgt aussehen:

  1. i = 0, j = 2, k = 0

  2. i = 1, j = 1, k = 1

  3. i = 2, j = 0, k = 2

Verwandte Themen