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 j
in 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 j
zu 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
}
Debuggen/Schritt durch Ihren Code und es wird klar sein, was passiert. – PeeHaa