break と continue は、ループの実行フローを変えるキーワードです。break は反復処理のページで無限ループ脱出の文脈で登場しましたが、通常の for・while・foreach でも使えます。
break でループを途中で終了できるcontinue で現在の反復だけをスキップして次の反復に進める書式:break 文
1
break;
break を実行するとループがただちに終了し、ループの直後の処理に移ります。
1
2
3
4
5
6
7
8
9
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}
Console.WriteLine(i);
}
Console.WriteLine("完了");
1
2
3
4
0
1
2
完了
i が 3 になった時点でループを抜けるため、4 以降は出力されません。
break の代表的な使い方は「目的の条件が満たされたらループを打ち切る」です。
1
2
3
4
5
6
7
8
9
10
11
12
13
bool hasLow = false;
for (int i = 0; i < 10; i++)
{
int score = i * 10;
if (score < 30)
{
hasLow = true;
break; // 1 つ見つかれば十分なので終了
}
}
Console.WriteLine(hasLow ? "30 未満がある" : "すべて 30 以上");
書式:continue 文
1
continue;
continue を実行すると、ループ本体の残りの処理を飛ばして次の反復(条件チェック)に移ります。
1
2
3
4
5
6
7
8
for (int i = 0; i < 6; i++)
{
if (i % 2 == 0)
{
continue; // 偶数はスキップ
}
Console.WriteLine(i);
}
1
2
3
1
3
5
i が偶数のとき continue が実行されると Console.WriteLine を飛ばして i++ と条件チェックに進みます。
while で continue を使うときは、ループ変数の更新が continue より前にあることを確認してください。
1
2
3
4
5
6
7
8
9
10
int i = 0;
while (i < 6)
{
i++; // ← 更新を先に書く(continue より前)
if (i % 2 == 0)
{
continue; // i++ は済んでいるので無限ループにならない
}
Console.WriteLine(i);
}
⚠️
for文なら更新式が自動的に実行されるため、この問題は起きません。whileでcontinueを使う場合は要注意です。
break と continue は最も内側のループにのみ作用します。
1
2
3
4
5
6
7
8
9
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (j == 1) break; // 内側の for だけを抜ける
Console.WriteLine($"i={i}, j={j}");
}
// 内側が break してもここに来る
}
1
2
3
i=0, j=0
i=1, j=0
i=2, j=0
内側のループが j == 1 で終了しても、外側の i ループは止まりません。
1
2
3
4
5
6
7
8
9
10
11
12
int i = 0;
// ❌ 無限ループ: i が偶数のとき i++ が永遠に実行されない
while (i < 6)
{
if (i % 2 == 0)
{
continue; // i++ より先に実行される
}
Console.WriteLine(i);
i++;
}
for 文に書き換えれば安全です。
| キーワード | 動作 |
|---|---|
break |
ループをその場で終了し、ループの直後に移る |
continue |
現在の反復の残りをスキップし、次の反復(条件チェック)に移る |
どちらも最も内側のループにのみ作用します。
次のコードの出力結果を答えてください。
1
2
3
4
5
for (int i = 0; i < 5; i++)
{
if (i == 3) break;
Console.WriteLine(i);
}
次のコードの出力結果を答えてください。
1
2
3
4
5
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
Console.WriteLine(i);
}
0・1・2。i == 3 で break が実行されます。
0・1・3・4。i == 2 のときだけ continue で Console.WriteLine がスキップされます。
break と continue は配列の走査でもよく使います。配列と foreach(補足) では foreach での活用例を学びます。