2017-04-17 6 views
-2

++ - > < =以外の数学記号は使用できません。なぜこれが無限ループであるのかわかりません。これはなぜjavaの無限ループですか?

while (d < n) 
    { 

     System.out.print(d + " "); 
     for (count = 0 ; count < d ; count++) 
     { 
     d++; 
     } 
     for (count = d; count > 0; count--) 
     { 
     } 
    } 
+2

繰り返し回数を増やすと、同じ回数だけカウントが増えます。だから、カウントはdより小さくなることはありません。 – TZHX

+0

'd'のデータ型は何ですか? 'd'が整数型の場合は、浮動小数点型よりも答えが異なります。 –

答えて

0

あなたはloop..since dにおいてdは変化するため、常にこのforがありながら、ブロックには問題はありませんが、

for (count = 0 ; count < d ; count++) 
{ 
    d++; 
} 

あなたがループに

+0

いいえ、それは半分の話です。 'd'が' int'の場合、それはかなり早くオーバーフローし、内部ループは 'Integer.MIN_VALUE'に到達すると終了します。問題はそれが 'n 'より小さくなるため、外側のループをエスケープできないということです。 –

0

を脱出しようとされることはありません増加していますブロックは悪いです。 dがすでに大きい場合、countは無限ループになります。 d = 2、count = 0とする。第2ループd=3,count=1。第3ループd=4,とそれはそのようになります。

+1

整数オーバーフローが発生するまで。その後、それは面白くなる! –

+0

はい、あなたが説明したいのであれば、長い長く深い話です。 – ReadyFreddy

+0

さて、はい、私はそうしました。これほど長い話ではありません。答えは本当に真実ではありません。 'd'が' int'または 'long'の場合、' for'ループは永遠に続きません。 –

5

dnは両方ともタイプがintであり、実際には外側ループが繰り返されると仮定します。

ケース1 - dが最初はゼロまたは負の場合、forループのいずれも繰り返し処理されません。したがって、dは決して変更されないので、d < nは真実ではなくなりません。したがって、whileループは決して終了しません。

ケース2 - dが正であれば、次にwhileループの最初の反復で、最初forループを同時にcountdの両方を増加させます。 forの条件は、dが整数オーバーフローを達成し、Integer.MIN_VALUEになるまで実行を継続します。 forループが終了します。しかし、whileループの2回目の繰り返しは、ケース1と同じです。終了しません。

関連する問題