2016-09-19 15 views
-4

なぜ次は無限ループを生成するのですか?Java || while文with無限ループ

int sum = 0;  
    int k = 1; 
    while (sum < 12 || k < 4) 
    sum += k; 

    System.out.println(sum); 

Iは、そうでなければK < 4意志、合計が12に達すると、kが1

+0

インデントの問題.... – Rishi

+7

「k」はまだ4未満です。 – resueman

+1

インクリメントkの値 – Rishi

答えて

1

のまま(和 & K < 4)中に使用すべき、出力は12であろうと仮定なります常に真となり、ループは継続して実行されます。

ORを使用すると、これらの条件のいずれかが当てはまるとループが続行されます。条件は、ループが停止しないように継続することです。ループは

+0

しかし、それはORステートメントなので、sum <12 OR k <4であるかどうかをチェックしませんか? –

+0

ORを使用する場合、複数選択問題 –

+0

@Kyle McAllisterでした。これらの条件の1つが当てはまると、ループは続行されます。条件は、ループが停止しないように継続することです。 false || true == true –

1

kがインクリメントされない継続した場合

false || true == true 
true || true == true 
false || false == false 

false && true == false 
true && true == true 
false && false == false 

得られた真または偽を判定する。

int sum = 0; 
int k = 1; 

while (sum < 12 || k < 4) { 
    sum += k; 
    k++; 
} 

System.out.println(sum); 
+0

これはなぜ必要なのでしょうか、ループ<12 OR k <4?プラスこれは異なる合計をもたらすだろうか? –

+0

@KyleMcループを続ける条件のいくつかが満たされていれば続ける – amchacon

0

kの値は、すべての反復で一定です。

ループ条件は、sum<12またはk<4です。反復の間にkの値を変更しないので、常に4未満になり、ループは継続します。

1

コードkでは、増分しないため、条件はtrueのままです。だからあなたのループは無限です。

int sum = 0; // sum is 0 
    int k = 1;  // k is 1 
    while (sum < 12 || k < 4) { 
    sum += k; // sum is incremented by 1 each time it loops 
    } 

System.out.println(sum);

ここで、kの値はまだ4未満です。したがって、無限ループします。

編集:私はそれをもう少し明確に

作ってるんださてここであなたのwhileループが

while (sum < 12 || k < 4)

あるそれはどちらかの意味sum < 12が真である必要がありますかk < 4が真である必要があり、へwhileループをループします。

ここでは、あなたのk < 4の状態はまだ真です。だからこそ、それは無限ループを続けています。

+0

それは多項選択問題(私のコードではありません)でした。合計金額が12になると、それは文章で十分ではないでしょうか? –

+1

いいえ、ループを終了するには両方とも真でなければなりません。 –

+0

ありがとうございました。私は全く間違っていると思っていた私はそれが1つまたは他のものが満たされたときに壊れると思っていました。それは実際にはどちらか一方が真実である間、それは壊れずに続きます。 –

0

||ステートメント。 "|| & &"についてのドキュメントをすべて読む=> OR。 ステートメントの左側が真で、右側がfalse = true(||を使用している場合)

関連する問題