以下のコード スニペットを見てみましょう。
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
無限ループを回避するには、コードにどのような変更を加える必要がありますか?
以下のコード スニペットを見てみましょう。
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
無限ループを回避するには、コードにどのような変更を加える必要がありますか?
最後ではなく最初にインクリメントを行います。
int i = -1;
while ( i <= 10 )
{
i++;
System.out.println(i);
if ( i == 8 )
{
continue;
}
// Presumably there would be some code here, or this doesn't really make much sense
}
または、言語によっては、while
ステートメント内で直接行うこともできます (i++
またはを選択する際の演算子の優先順位に注意してください++i
) 。
int i = 0
while ( i++ <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
// Presumably there would be some code here, or this doesn't really make much sense
}
while
ただし、この種の構造にループを使用することには疑問があります。ループでカウンターを使用する場合for
は、通常、ループの方が適しています。
クイックフィックス ソリューションの代わりに、コードを 1 分間見て、1 行ずつ実行してみましょう。
int i = 0;
while ( i <= 10 )
{
System.out.println(i);
if ( i == 8 )
{
continue;
}
i++;
}
i
最初は 0 で、10 未満であるため、ループに入り、0 を出力して 1 にインクリメントします。その後i
、2、3、4、.. 8 になります。
8に等しくなると、インクリメントする代わりに、ループの先頭に戻り、8を再度出力します.. i
(8である)の値をチェックし、再び続行して8を出力します..そしてこれを続けます永遠まで。
したがって、テストする前に数値を増やすと、期待どおりに機能します。
コードを次のように変更します
int i = 0;
while ( i <= 10 )
{
if ( i != 8 )
{
System.out.println(i);
}
i++;
}
Eric Petroelje の答えが好きです。次のようなことをお勧めします。
if (++i >= 8) continue;
さらに、最近のコンパイラは、これを無限ループの可能性として警告するのに十分です。これを検出するコード分析ツールもあります。
これは、ほとんどの場合に使用することをお勧めするコードではありませんが、目的には役立ちます。
int i = 0;
while ( i <= 10 )
{
Console.WriteLine(i.ToString());
if ( i == 8 )
{
// Do some work here, then bail on this iteration.
goto Continue;
}
Continue: // Yes, C# does support labels, using sparingly!
i++;
}