2017-02-11 2 views
-6

は、私は、javaに新しい、私はループを練習するためのコードを書いていて、ここにある:この無限ループの背後にある理由は何ですか?

public class scratch { 

    public static void main(String args[]) { 

     int value = 0; 
     boolean myBoolean = (value < 5); 

     while(myBoolean) { 

      System.out.println(value); 
      value = value + 1; 
     } 
    } 
} 

私はそれを実行すると、私は無限ループを得るが、私のような「しばらく」引数を変更した場合この:

public class scratch { 

    public static void main(String args[]) { 

     int value = 0; 
     boolean myBoolean = (value < 5); 

     while(value < 5) { 

      System.out.println(value); 
      value = value + 1; 
     } 
    } 
} 

それが動作し、ここに出力されます:

0 
1 
2 
3 
4 

あなたは私がここに欠けているものを私に教えてくださいすることができ、ありがとうございました!

+4

この小さな実験では、ブール変数getが一度評価され、それがどのように初期化されたかは気にしません(つまり、値が変更されたときに更新されません)。それについては何が分かりませんか? – Tom

+1

最初のケースでは、 'myBoolean'の値は' value'を変更しても変更されません。それは第二のケースではどちらかではありませんが、それは重要ではありません。 –

+0

ブール値= 0 <5常に – SaggingRufus

答えて

1

あなたもとき、myBooleanを更新している最後の行せずに

final int LIMIT = 5; // <-- try to avoid magic numbers. 
boolean myBoolean = (value < LIMIT); // <-- assigns the result of the expression 
            // `value < LIMIT` to `myBoolean`. 
while(myBoolean) { 
    System.out.println(value); 
    value = value + 1; // <-- value++; 
    myBoolean = (value < LIMIT); 
} 

のように、それを動作させるために、ループ本体のあなたの値を設定するboolean式を再評価しなければなりませんmyBooleantrue、は常にとなります。

+0

マジックナンバーを避けるとどういう意味ですか? なぜ5を書くのではなく、変数LIMITを使用したのですか? ありがとうございました! –

0

最初の例では、「myBolean」を1回だけ設定し、その値を変更しないでください。あなたのループは無限に走るのです。

2番目の例では、ループの実行ごとに値<をチェックします。

ループにアジテーションを移動すると、それも機能します。

public class scratch { 

public static void main(String args[]) { 
    int value = 0; 
    boolean myBoolean = true; 
    while(myBoolean) { 
     System.out.println(value); 
     value = value + 1; 
     myBoolean = (value < 5); 
    } 
} 

}

+0

* *両方の例では、 'myBoolean'は一度しか設定されません。 –

+0

ああ。あなたの右。 –

0

の理由は、あなたが値をゼロに初期化されると真であるboolean myBoolean = (value < 5);するブール変数を設定している最初のケース

public class scratch { 

    public static void main(String args[]) { 

     int value = 0; 
     boolean myBoolean = (value < 5); 

     while(myBoolean) { 

      System.out.println(value); 
      value = value + 1; 
     } 
    } 
} 

で、簡単です。あなたはそれ以降変更されていないので、第二の場合に

public class scratch { 

    public static void main(String args[]) { 

     int value = 0; 
     boolean myBoolean = (value < 5); 

     while(value < 5) { 

      System.out.println(value); 
      value = value + 1; 
     } 
    } 
} 

を使用すると、ループ内の値を増加させ、ループを続行するための値そのものを比較しているときは、無限ループ

で終わります値が5になると条件が偽になり、ループが終了します。

関連する問題