2016-12-10 9 views
0

答えが0で、1でないのはなぜですか?私はそれがブール文と何か関係があることを知っていますが、私はそれがどのように機能するか把握できません。 i、jは両方1なぜ0が出力されますか?

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); 
} 

に等しいときに私の理解からは、whileループは停止し、プリントアウト0

+0

コードをデバッグ/ステップ実行すると、何が起きているのかが明確になります。 – PeeHaa

答えて

1

あなたはおそらく、あなたがkeepGoing変数がループを停止すると思いますので、と言っています... まあ、keepGoingの変数はまったく変わりません!あなたはこれであなたの変数をインスタンス化:

boolean keepGoing; 
keepGoing = i<j; 

をこの式は、(その時点でそれぞれ0及び2)その値でこれらの変数を置き換え、コードにその瞬間にijの値を見ていきます、比較を処理するだけです。コードのその瞬間にij未満であるため、trueを返してkeepGoingをtrueに設定します。その後、keepGoingは、iまたはjが変更されるたびに変更されません。そうではありません。 keepGoingの値は、別の値を設定した場合にのみ変更されます。 一般に、変化するように指示する明示的な行(またはメソッド)がある場合にのみ変数が変更されます。iまたはjを変更するたびにkeepGoingを変更したい場合は、その都度keepGoingを明示的に再計算する必要があります。あなたのケースでは、これはあなたのwhileブロックの最後に次のようになります。

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

あなたがint jを減少し、int型のkは増加しているためです。

一方のステップは次のようになります。私は

  1. I = 0、J = 2、K = 0

  2. I = 1、J = 1、K = 1

  3. = 2、j = 0、k = 2

関連する問題