Unity & C# 学習教材

break と continue(補足)

breakcontinue は、ループの実行フローを変えるキーワードです。break反復処理のページで無限ループ脱出の文脈で登場しましたが、通常の forwhileforeach でも使えます。

学習目標

前提知識


1. break — ループを途中で終了する

書式:break 文

1
break;

break を実行するとループがただちに終了し、ループの直後の処理に移ります。

条件チェック true ループ本体 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
完了

i3 になった時点でループを抜けるため、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 以上");

2. continue — 現在の反復をスキップする

書式:continue 文

1
continue;

continue を実行すると、ループ本体の残りの処理を飛ばして次の反復(条件チェック)に移ります。

条件チェック true ループ本体 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 での注意点

whilecontinue を使うときは、ループ変数の更新が 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 文なら更新式が自動的に実行されるため、この問題は起きません。whilecontinue を使う場合は要注意です。


3. ネストしたループでの動作

breakcontinue最も内側のループにのみ作用します。

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 ループは止まりません。


よくあるミス

while で continue の前にループ変数の更新を書く

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. 次のコードの出力結果を答えてください。

    1
    2
    3
    4
    5
    
    for (int i = 0; i < 5; i++)
    {
        if (i == 3) break;
        Console.WriteLine(i);
    }
    
  2. 次のコードの出力結果を答えてください。

    1
    2
    3
    4
    5
    
    for (int i = 0; i < 5; i++)
    {
        if (i == 2) continue;
        Console.WriteLine(i);
    }
    
解答を見る
  1. 012i == 3break が実行されます。

  2. 0134i == 2 のときだけ continueConsole.WriteLine がスキップされます。


次のステップ

breakcontinue は配列の走査でもよく使います。配列と foreach(補足) では foreach での活用例を学びます。