C#のbreak文とは?ループ・switchでの使い方とcontinueとの違いを初心者向けに解説
はじめに
C#でループ処理や条件分岐を書いていると、よく登場するのがbreak文です。
breakは、処理を途中で終了して抜けたいときに使う制御文です。特に、for文、while文、foreach文、switch文などでよく使われます。
たとえば、配列の中から目的の値を探しているとき、見つかったあとも最後まで繰り返す必要はありません。そのような場合にbreakを使うと、不要な処理を省いてループを途中で終了できます。
この記事では、C#のbreak文について、基本構文、ループでの使い方、switch文での役割、continue文との違い、よくあるエラーまで初心者向けに解説します。
1. C#のbreak文とは?処理を途中で抜けるための基本構文
1-1. break文の意味と役割
C#のbreak文は、現在実行中のループ処理やswitch文を途中で終了するための文です。
通常、ループ文は条件が満たされている間、処理を繰り返します。しかし、ある条件になった時点で繰り返しをやめたい場合があります。
たとえば、次のような場面です。
目的のデータが見つかったので検索を終了したい
入力値が特定の条件を満たしたので処理を止めたい
無限ループを特定のタイミングで終了したい
switch文で該当するcaseの処理だけを実行したい
このようなときにbreakを使います。
C#for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
このコードでは、iが5になった時点でbreakが実行されます。そのため、画面に表示されるのは1から4までです。
1-2. break文が使える場所:ループ文とswitch文
C#でbreak文が使える主な場所は、次の2つです。
1つ目はループ文です。
C#for
while
do-while
foreach
2つ目はswitch文です。
C#switch
一方で、if文だけの中ではbreakは使えません。
C#if (true)
{
break; // エラー
}
ただし、if文がループ文やswitch文の中にある場合は使えます。
C#for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break; // これは使える
}
}
つまり、breakは「ループまたはswitchを抜けるための文」と覚えると分かりやすいです。
1-3. break文を書く基本構文
break文の書き方はとてもシンプルです。
C#break;
breakの後ろにはセミコロン;を付けます。
ループの中で使う場合は、一般的にif文と組み合わせて使います。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
switch文で使う場合は、各caseの処理の最後に書きます。
C#int number = 2;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("その他です");
break;
}
このように、breakは処理の流れを途中で止めたい場所に書きます。
1-4. break文を使うとプログラムの流れがどう変わるか
breakが実行されると、その時点でループまたはswitch文の処理が終了します。
次の例を見てみましょう。
C#for (int i = 1; i <= 5; i++)
{
Console.WriteLine("開始: " + i);
if (i == 3)
{
break;
}
Console.WriteLine("終了: " + i);
}
Console.WriteLine("ループの外です");
実行結果は次のようになります。
開始: 1
終了: 1
開始: 2
終了: 2
開始: 3
ループの外です
iが3のとき、breakが実行されます。そのため、breakより後ろにある次の処理は実行されません。
C#Console.WriteLine("終了: " + i);
そして、ループを抜けた後の処理に進みます。
C#Console.WriteLine("ループの外です");
このように、breakは「その場でループやswitchを終了して、外側の処理へ進む」ための文です。
2. ループ処理でのbreak文の使い方
2-1. for文でbreakを使う方法
for文は、指定した回数だけ処理を繰り返したいときによく使います。
breakを使うと、繰り返し回数が残っていても途中で終了できます。
C#for (int i = 1; i <= 10; i++)
{
if (i == 6)
{
break;
}
Console.WriteLine(i);
}
実行結果は次のとおりです。
1
2
3
4
5
iが6になった時点でbreakが実行されるため、6以降は表示されません。
for文では、「最大で10回繰り返すが、条件を満たしたら途中で終了する」という処理によくbreakを使います。
2-2. while文でbreakを使う方法
while文は、条件がtrueの間、処理を繰り返します。
C#int count = 1;
while (count <= 10)
{
if (count == 4)
{
break;
}
Console.WriteLine(count);
count++;
}
実行結果は次のようになります。
1
2
3
countが4になった時点でループが終了します。
また、while (true)のような無限ループでも、breakを使えば安全に終了できます。
C#int count = 1;
while (true)
{
Console.WriteLine(count);
if (count == 5)
{
break;
}
count++;
}
この場合、条件式は常にtrueですが、countが5になったときにbreakで終了します。
2-3. do-while文でbreakを使う方法
do-while文は、条件判定の前に必ず1回は処理を実行するループです。
C#int number = 1;
do
{
if (number == 3)
{
break;
}
Console.WriteLine(number);
number++;
} while (number <= 5);
実行結果は次のとおりです。
1
2
numberが3になった時点でbreakが実行されるため、ループは終了します。
do-while文でも、breakの意味は他のループと同じです。実行中のループを途中で抜けます。
2-4. foreach文でbreakを使う方法
foreach文は、配列やリストなどの要素を順番に取り出して処理するときに使います。
C#string[] fruits = { "apple", "banana", "orange", "grape" };
foreach (string fruit in fruits)
{
if (fruit == "orange")
{
break;
}
Console.WriteLine(fruit);
}
実行結果は次のようになります。
apple
banana
fruitが"orange"になった時点でbreakが実行されます。そのため、"orange"も"grape"も表示されません。
foreach文では、目的の要素が見つかった時点で処理を終了したい場合にbreakが便利です。
2-5. 条件に一致したらループを終了するサンプルコード
次の例では、配列の中から特定の数値を探し、見つかったらループを終了します。
C#int[] numbers = { 10, 25, 30, 45, 50 };
int target = 30;
bool found = false;
foreach (int number in numbers)
{
if (number == target)
{
found = true;
break;
}
}
if (found)
{
Console.WriteLine("見つかりました");
}
else
{
Console.WriteLine("見つかりませんでした");
}
このコードでは、numberが30になった時点でfoundにtrueを代入し、breakでforeach文を終了します。
目的の値が見つかった後に、残りの要素を調べる必要はありません。breakを使うことで、無駄な繰り返しを避けられます。
3. switch文でのbreak文の使い方
3-1. switch文におけるbreakの役割
switch文は、値に応じて処理を分岐させるための構文です。
C#のswitch文では、各caseの処理を終了するためにbreakをよく使います。
C#int command = 1;
switch (command)
{
case 1:
Console.WriteLine("開始します");
break;
case 2:
Console.WriteLine("停止します");
break;
default:
Console.WriteLine("不明なコマンドです");
break;
}
この例では、commandが1なので、次の処理が実行されます。
開始します
その後、breakによってswitch文を抜けます。
3-2. caseごとにbreakを書く理由
switch文では、複数のcaseを並べて書きます。
C#switch (value)
{
case 1:
// valueが1のときの処理
break;
case 2:
// valueが2のときの処理
break;
}
各caseの最後にbreakを書く理由は、そのcaseの処理が終わったあとにswitch文を抜けるためです。
C#では、基本的にあるcaseの処理が終わったあと、そのまま次のcaseへ流れることはできません。
次のようにbreakを書かないと、コンパイルエラーになります。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
case 2:
Console.WriteLine("2です");
break;
}
C#では、意図しない処理の流れを防ぐため、caseから次のcaseへ自然に落ちる書き方は基本的に禁止されています。
そのため、caseの処理の最後にはbreakを書くのが基本です。
3-3. default句とbreakの使い方
default句は、どのcaseにも一致しなかった場合に実行される処理です。
C#int number = 9;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("1でも2でもありません");
break;
}
この例では、numberが1でも2でもないため、default句が実行されます。
1でも2でもありません
default句でも、通常は最後にbreakを書きます。
特に初心者のうちは、caseとdefaultの最後には必ずbreakを書く、と覚えておくと安全です。
3-4. C#のswitch文でbreakを書かないとどうなるか
C#のswitch文では、処理のあるcaseの最後にbreakなどの終了処理を書かないと、コンパイルエラーになることがあります。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
// breakがないためエラー
case 2:
Console.WriteLine("2です");
break;
}
C#では、C言語などにあるような「次のcaseへそのまま処理が流れる」動きは基本的にできません。
ただし、複数のcaseで同じ処理をしたい場合は、次のように書けます。
C#int number = 2;
switch (number)
{
case 1:
case 2:
case 3:
Console.WriteLine("1から3のどれかです");
break;
default:
Console.WriteLine("その他です");
break;
}
このように、処理を書かずにcaseを並べることはできます。
また、意図的に別のcaseへ移動したい場合は、goto caseを使うこともできます。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
goto case 2;
case 2:
Console.WriteLine("2の処理も実行します");
break;
}
ただし、初心者のうちはgoto caseを多用せず、基本的にはbreakで分かりやすく書くのがおすすめです。
3-5. switch式との違いも簡単に確認
C#には、switch文のほかにswitch式もあります。
switch文は、処理を分岐させるために使います。
C#int number = 2;
switch (number)
{
case 1:
Console.WriteLine("一");
break;
case 2:
Console.WriteLine("二");
break;
default:
Console.WriteLine("その他");
break;
}
一方、switch式は、条件に応じて値を返すために使います。
C#int number = 2;
string text = number switch
{
1 => "一",
2 => "二",
_ => "その他"
};
Console.WriteLine(text);
switch式では、各分岐にbreakを書きません。
つまり、breakを使うのは主にswitch文であり、switch式では使わないと覚えておきましょう。
4. break文とcontinue文の違い
4-1. breakはループを終了する
breakは、ループそのものを終了します。
C#for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
break;
}
Console.WriteLine(i);
}
実行結果は次のとおりです。
1
2
iが3になった時点で、ループ全体が終了します。そのため、4や5の処理も実行されません。
4-2. continueは次の繰り返しへ進む
continueは、現在の繰り返しだけをスキップして、次の繰り返しへ進みます。
C#for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
1
2
4
5
iが3のときだけ、Console.WriteLine(i);がスキップされます。
しかし、ループ自体は終了しないため、4と5は実行されます。
4-3. breakとcontinueの処理の流れを比較
breakとcontinueの違いは、次のように整理できます。
| 制御文 | 意味 | その後の処理 |
|---|---|---|
| break | ループを終了する | ループの外へ進む |
| continue | 今回の繰り返しをスキップする | 次の繰り返しへ進む |
たとえば、iが3のときに処理を止めたいならbreakを使います。
C#if (i == 3)
{
break;
}
一方、iが3のときだけ処理を飛ばしたいならcontinueを使います。
C#if (i == 3)
{
continue;
}
「もう繰り返しを続ける必要がない」のか、「今回だけ飛ばして次に進みたい」のかで使い分けます。
4-4. サンプルコードで違いを確認
まずはbreakの例です。
C#for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
break;
}
Console.WriteLine("breakの例: " + i);
}
実行結果は次のとおりです。
breakの例: 1
breakの例: 2
次にcontinueの例です。
C#for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;
}
Console.WriteLine("continueの例: " + i);
}
実行結果は次のようになります。
continueの例: 1
continueの例: 2
continueの例: 4
continueの例: 5
breakはループをそこで終了します。
continueはその回だけスキップして、次の繰り返しへ進みます。
4-5. breakとcontinueを使い分ける判断基準
breakとcontinueを使い分けるときは、次のように考えると分かりやすいです。
処理を完全に終了したい場合はbreakを使います。
C#if (見つかった)
{
break;
}
今回の処理だけを飛ばして、次の繰り返しを続けたい場合はcontinueを使います。
C#if (スキップしたい条件)
{
continue;
}
たとえば、配列から目的の値を探す場合は、見つかった時点で終了してよいのでbreakが向いています。
一方、一覧の中から無効なデータだけを飛ばして処理を続けたい場合は、continueが向いています。
C#foreach (int number in numbers)
{
if (number < 0)
{
continue;
}
Console.WriteLine(number);
}
この例では、負の数だけをスキップして、それ以外の数値は処理します。
5. break文を使うときの注意点
5-1. if文だけの中ではbreakは使えない
breakは、ループ文またはswitch文の中で使う制御文です。
そのため、次のようにif文だけの中に書くとエラーになります。
C#if (true)
{
break; // エラー
}
ただし、if文がループの中にある場合は使えます。
C#for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; // これはOK
}
}
この場合、breakが抜ける対象はif文ではなく、外側のfor文です。
初心者のうちは、「breakはifを抜けるためのものではない」と覚えておきましょう。
5-2. 多重ループでは一番内側のループだけ抜ける
ループの中にさらにループがある構造を、多重ループといいます。
C#for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
if (j == 2)
{
break;
}
Console.WriteLine($"i={i}, j={j}");
}
}
このコードでは、breakが抜けるのは内側のfor文だけです。
外側のfor文はそのまま続きます。
実行結果は次のようになります。
i=1, j=1
i=2, j=1
i=3, j=1
jが2になるたびに内側のループは終了しますが、iのループは続きます。
5-3. switch文内のbreakは外側のループを終了しない
ループの中にswitch文がある場合、switch文の中のbreakはswitch文だけを抜けます。
C#for (int i = 1; i <= 3; i++)
{
switch (i)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
Console.WriteLine("ループは続きます");
}
この場合、breakはswitch文を終了するだけで、外側のfor文は終了しません。
実行結果は次のようになります。
1です
ループは続きます
2です
ループは続きます
ループは続きます
外側のループも終了したい場合は、フラグ変数を使う、returnでメソッドを抜ける、処理構造を見直すなどの方法を検討します。
5-4. break後の処理は実行されない
breakが実行されると、その後ろにある同じブロック内の処理は実行されません。
C#for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
break;
Console.WriteLine("ここは実行されません");
}
Console.WriteLine(i);
}
このように、breakの直後に処理を書くと、到達できないコードになります。
実際には、breakの後ろに同じ流れで処理を書く意味はありません。
C#if (i == 3)
{
Console.WriteLine("終了します");
break;
}
必要な処理がある場合は、breakより前に書きましょう。
5-5. breakを使いすぎると処理の流れが分かりにくくなる
breakは便利ですが、使いすぎるとプログラムの流れが分かりにくくなることがあります。
たとえば、1つのループの中に何度もbreakが出てくると、どの条件で処理が終了するのか追いにくくなります。
C#while (true)
{
if (condition1)
{
break;
}
if (condition2)
{
break;
}
if (condition3)
{
break;
}
}
このようなコードがすべて悪いわけではありませんが、条件が多くなる場合は、処理をメソッドに分けたり、条件式を整理したりすると読みやすくなります。
breakは「ここで終了する理由」が明確な場所で使うのがポイントです。
6. break文の実践的な使いどころ
6-1. 条件を満たす要素が見つかった時点で検索を終了する
breakの代表的な使いどころは、検索処理です。
配列やリストの中から目的の値を探すとき、見つかった後に残りの要素を調べる必要はありません。
C#string[] names = { "田中", "佐藤", "鈴木", "高橋" };
string target = "鈴木";
bool found = false;
foreach (string name in names)
{
if (name == target)
{
found = true;
break;
}
}
if (found)
{
Console.WriteLine("見つかりました");
}
else
{
Console.WriteLine("見つかりませんでした");
}
"鈴木"が見つかった時点でbreakを実行するため、それ以降の検索を省略できます。
6-2. 入力値が特定条件を満たしたら処理を止める
ユーザーからの入力を受け取り続け、特定の値が入力されたら終了する処理にもbreakが使えます。
C#while (true)
{
Console.WriteLine("文字を入力してください。終了するには exit と入力してください。");
string? input = Console.ReadLine();
if (input == "exit")
{
break;
}
Console.WriteLine("入力内容: " + input);
}
Console.WriteLine("処理を終了しました");
この例では、ユーザーがexitと入力するとbreakが実行され、while文を終了します。
6-3. 無限ループを安全に終了する
while (true)を使うと、条件式が常にtrueになるため、そのままでは無限に繰り返します。
そこで、特定の条件になったらbreakで終了します。
C#int count = 0;
while (true)
{
count++;
Console.WriteLine(count);
if (count >= 5)
{
break;
}
}
実行結果は次のとおりです。
1
2
3
4
5
無限ループを書く場合は、必ずどこかで終了できる条件を用意することが大切です。
6-4. エラーや例外的な条件でループを抜ける
処理中に異常な値や想定外の状態を見つけた場合、breakでループを終了することがあります。
C#int[] scores = { 80, 75, -1, 90, 60 };
foreach (int score in scores)
{
if (score < 0)
{
Console.WriteLine("不正な点数が見つかったため処理を終了します");
break;
}
Console.WriteLine("点数: " + score);
}
実行結果は次のようになります。
点数: 80
点数: 75
不正な点数が見つかったため処理を終了します
この例では、負の点数を不正な値として扱い、その時点で処理を終了しています。
ただし、本当にエラーとして扱うべき場合は、throwで例外を発生させることも検討します。
6-5. メニュー選択処理でswitchとbreakを組み合わせる
switch文とbreakは、メニュー選択処理でよく組み合わせて使われます。
C#while (true)
{
Console.WriteLine("メニューを選択してください");
Console.WriteLine("1: 開始");
Console.WriteLine("2: 設定");
Console.WriteLine("3: 終了");
string? input = Console.ReadLine();
switch (input)
{
case "1":
Console.WriteLine("開始します");
break;
case "2":
Console.WriteLine("設定を開きます");
break;
case "3":
Console.WriteLine("終了します");
return;
default:
Console.WriteLine("正しい番号を入力してください");
break;
}
}
この例では、case "1"やcase "2"のbreakはswitch文を抜けるだけです。
whileループそのものを終了したい場合は、ここではreturnを使ってメソッド全体を終了しています。
このように、switch内のbreakとループ終了の違いを理解しておくことが重要です。
7. break文でよくあるエラーと対処法
7-1. 「break文はループまたはswitch内でしか使えない」エラー
breakをループ文やswitch文の外に書くと、エラーになります。
C#int number = 10;
if (number > 5)
{
break; // エラー
}
この場合、breakで抜ける対象がありません。
対処法としては、breakを使う場所をループまたはswitchの中に移動します。
C#for (int i = 0; i < 10; i++)
{
if (i > 5)
{
break;
}
Console.WriteLine(i);
}
もしメソッド全体を終了したい場合は、breakではなくreturnを使います。
C#void CheckNumber(int number)
{
if (number > 5)
{
return;
}
Console.WriteLine(number);
}
7-2. breakとreturnを混同してしまう
breakとreturnは、どちらも処理を途中で終わらせるために使えます。
しかし、終了する範囲が違います。
breakは、ループまたはswitchを終了します。
C#for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}
}
Console.WriteLine("ここは実行されます");
一方、returnはメソッド全体を終了します。
C#void Sample()
{
for (int i = 0; i < 10; i++)
{
if (i == 3)
{
return;
}
}
Console.WriteLine("ここは実行されません");
}
ループだけを抜けたいならbreak、メソッド自体を終了したいならreturnを使います。
7-3. 多重ループをすべて抜けられると勘違いする
多重ループの中でbreakを使っても、抜けるのは一番内側のループだけです。
C#for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
if (i == 2 && j == 2)
{
break;
}
Console.WriteLine($"i={i}, j={j}");
}
}
このコードでは、breakで終了するのは内側のjのループだけです。外側のiのループは続きます。
多重ループをすべて抜けたい場合は、フラグ変数を使う方法があります。
C#bool shouldStop = false;
for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
if (i == 2 && j == 2)
{
shouldStop = true;
break;
}
Console.WriteLine($"i={i}, j={j}");
}
if (shouldStop)
{
break;
}
}
このように、内側のループを抜けたあと、外側のループでもbreakするようにします。
7-4. switch文のbreak忘れによるコンパイルエラー
C#のswitch文では、処理を書いたcaseの最後にbreakなどの終了処理が必要です。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
// breakがないためエラー
case 2:
Console.WriteLine("2です");
break;
}
対処法は、各caseの最後にbreakを書くことです。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
default:
Console.WriteLine("その他です");
break;
}
ただし、returnやthrowなどで処理が必ず終了する場合は、breakの代わりになることもあります。
C#switch (number)
{
case 1:
return;
case 2:
throw new Exception("エラーです");
}
初心者のうちは、まずcaseの最後にbreakを書く習慣を付けるとよいでしょう。
7-5. 意図しない場所で処理が終了してしまう原因
breakを書く場所を間違えると、想定より早くループが終了することがあります。
C#for (int i = 1; i <= 5; i++)
{
break;
Console.WriteLine(i);
}
このコードでは、ループに入った直後にbreakが実行されるため、Console.WriteLine(i);は実行されません。
また、条件式の書き方を間違えると、意図しないタイミングでbreakが実行されます。
C#for (int i = 1; i <= 5; i++)
{
if (i > 0)
{
break;
}
Console.WriteLine(i);
}
iは最初から1なので、i > 0はすぐにtrueになります。その結果、ループは1回目で終了します。
breakを使うときは、「どの条件で終了するのか」をよく確認しましょう。
8. break文と関連する制御文との違い
8-1. breakとreturnの違い
breakとreturnは、終了する範囲が異なります。
breakは、ループまたはswitchを終了します。
C#for (int i = 0; i < 5; i++)
{
if (i == 2)
{
break;
}
}
Console.WriteLine("break後の処理");
この場合、ループは終了しますが、その後のConsole.WriteLineは実行されます。
一方、returnはメソッド全体を終了します。
C#void Sample()
{
for (int i = 0; i < 5; i++)
{
if (i == 2)
{
return;
}
}
Console.WriteLine("return後なので実行されません");
}
returnが実行されると、そのメソッド内の残りの処理は実行されません。
8-2. breakとgotoの違い
gotoは、指定したラベルへ処理を移動する制御文です。
C#goto End;
Console.WriteLine("ここは実行されません");
End:
Console.WriteLine("終了位置です");
breakは、ループやswitchを抜けるための文です。
C#while (true)
{
break;
}
gotoを使えば柔軟に処理を移動できますが、使いすぎると処理の流れが分かりにくくなります。
C#では、通常のループ終了にはbreakを使い、特別な理由がない限りgotoは避けるのが一般的です。
ただし、switch文の中ではgoto caseやgoto defaultを使って、別のcaseへ移動することもできます。
C#int number = 1;
switch (number)
{
case 1:
Console.WriteLine("1です");
goto case 2;
case 2:
Console.WriteLine("2の処理です");
break;
}
8-3. breakとthrowの違い
throwは、例外を発生させるための文です。
C#throw new Exception("エラーが発生しました");
breakは、正常な処理の流れの中でループやswitchを終了するために使います。
C#foreach (int number in numbers)
{
if (number == 0)
{
break;
}
}
一方、throwは異常な状態を呼び出し元に伝えるために使います。
C#int Divide(int a, int b)
{
if (b == 0)
{
throw new DivideByZeroException("0で割ることはできません");
}
return a / b;
}
単にループを終了したいだけならbreak、エラーとして扱うべき状態ならthrowを使います。
8-4. どの制御文を使うべきかの選び方
制御文を選ぶときは、「何を終了したいのか」を考えると分かりやすいです。
| 目的 | 使う制御文 |
|---|---|
| ループやswitchを抜けたい | break |
| 今回の繰り返しだけ飛ばしたい | continue |
| メソッド全体を終了したい | return |
| 例外を発生させたい | throw |
| 指定したラベルへ移動したい | goto |
通常のループ終了にはbreakを使います。
特定の条件だけスキップしたい場合はcontinueです。
メソッド自体を終わらせたい場合はreturnを使います。
異常な状態を表したい場合はthrowを使います。
gotoは使える場面もありますが、コードが読みにくくなりやすいため、必要な場合だけ使うのがよいでしょう。
9. 初心者向け練習問題でbreak文を理解しよう
9-1. for文で指定した数値になったら終了する問題
次の問題を考えてみましょう。
1から10までの数値を表示し、6になったらループを終了してください。
解答例は次のとおりです。
C#for (int i = 1; i <= 10; i++)
{
if (i == 6)
{
break;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
1
2
3
4
5
iが6になった時点でbreakが実行されるため、6は表示されません。
9-2. foreach文で配列から特定の値を探す問題
配列の中から"C#"という文字列を探し、見つかったら検索を終了してください。
C#string[] languages = { "Java", "Python", "C#", "JavaScript" };
bool found = false;
foreach (string language in languages)
{
if (language == "C#")
{
found = true;
break;
}
}
if (found)
{
Console.WriteLine("C#が見つかりました");
}
else
{
Console.WriteLine("C#は見つかりませんでした");
}
この例では、"C#"が見つかった時点でbreakを実行しています。
配列の残りに"JavaScript"がありますが、すでに目的の値が見つかっているため、調べる必要はありません。
9-3. while文で入力が完了するまで繰り返す問題
ユーザーがendと入力するまで、入力を受け取り続ける処理を作ってみましょう。
C#while (true)
{
Console.WriteLine("入力してください。終了するには end と入力してください。");
string? input = Console.ReadLine();
if (input == "end")
{
break;
}
Console.WriteLine("入力された文字: " + input);
}
Console.WriteLine("入力を終了しました");
while (true)は無限ループですが、inputが"end"のときにbreakするため、安全に終了できます。
9-4. switch文でメニュー処理を作る問題
数値に応じてメニューを分岐する処理を作ってみましょう。
C#int menu = 2;
switch (menu)
{
case 1:
Console.WriteLine("新規作成");
break;
case 2:
Console.WriteLine("ファイルを開く");
break;
case 3:
Console.WriteLine("終了");
break;
default:
Console.WriteLine("無効なメニューです");
break;
}
この例では、menuが2なので、次のように表示されます。
ファイルを開く
各caseの最後にbreakを書くことで、該当する処理が終わったあとにswitch文を抜けます。
9-5. breakとcontinueを使い分ける問題
1から10までの数値を処理するとき、次の条件でコードを書いてみましょう。
3は表示しない8になったらループを終了する
解答例は次のとおりです。
C#for (int i = 1; i <= 10; i++)
{
if (i == 3)
{
continue;
}
if (i == 8)
{
break;
}
Console.WriteLine(i);
}
実行結果は次のようになります。
1
2
4
5
6
7
iが3のときはcontinueでその回だけスキップします。
iが8のときはbreakでループ全体を終了します。
このように、continueとbreakは目的に応じて使い分けます。
10. C#のbreak文に関するよくある質問
10-1. break文はどこまで処理を抜けますか?
break文は、現在のループまたはswitch文を抜けます。
for文の中で使えば、そのfor文を終了します。
C#for (int i = 0; i < 10; i++)
{
if (i == 3)
{
break;
}
}
switch文の中で使えば、そのswitch文を終了します。
C#switch (value)
{
case 1:
break;
}
多重ループの場合は、一番内側のループだけを抜けます。
外側のループまで一気に抜けるわけではありません。
10-2. break文はif文の中で使えますか?
if文だけの中では使えません。
C#if (true)
{
break; // エラー
}
ただし、if文がループやswitchの中にある場合は使えます。
C#while (true)
{
if (条件)
{
break;
}
}
この場合、breakはif文を抜けるのではなく、外側のwhile文を抜けます。
10-3. switch文では必ずbreakが必要ですか?
多くの場合、switch文の各caseの最後にはbreakが必要です。
C#switch (number)
{
case 1:
Console.WriteLine("1です");
break;
case 2:
Console.WriteLine("2です");
break;
}
ただし、return、throw、goto caseなどで処理の流れが明確に終了する場合は、break以外でも問題ありません。
C#switch (number)
{
case 1:
return;
case 2:
throw new Exception("エラーです");
}
初心者のうちは、caseの最後にはbreakを書くと覚えておくのがおすすめです。
10-4. 多重ループを一気に抜ける方法はありますか?
breakだけでは、多重ループを一気にすべて抜けることはできません。
breakで抜けるのは、一番内側のループだけです。
多重ループを抜けたい場合は、フラグ変数を使う方法があります。
C#bool stop = false;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
{
stop = true;
break;
}
}
if (stop)
{
break;
}
}
また、メソッド内であればreturnを使ってメソッド全体を終了する方法もあります。
C#void Search()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (i == 1 && j == 1)
{
return;
}
}
}
}
どちらを使うかは、ループだけを抜けたいのか、メソッド全体を終了したいのかで判断します。
10-5. break文とcontinue文はどちらを使えばよいですか?
ループを完全に終了したい場合はbreakを使います。
C#if (終了したい条件)
{
break;
}
現在の繰り返しだけをスキップして、次の繰り返しへ進みたい場合はcontinueを使います。
C#if (スキップしたい条件)
{
continue;
}
たとえば、目的のデータが見つかった時点で検索を終了するならbreakが向いています。
一方、無効なデータだけを飛ばして処理を続けるならcontinueが向いています。
C#foreach (int number in numbers)
{
if (number < 0)
{
continue;
}
Console.WriteLine(number);
}
判断に迷ったときは、「ループを終わらせたいのか」「今回だけ飛ばしたいのか」を考えましょう。
まとめ
C#のbreak文は、ループ文やswitch文を途中で終了するための制御文です。
for、while、do-while、foreachなどのループ内で使うと、条件を満たしたタイミングで繰り返しを終了できます。
また、switch文では、各caseの処理を終えてswitch文を抜けるためにbreakを使います。
breakとよく似た制御文にcontinueがありますが、役割は異なります。breakはループを終了し、continueは現在の繰り返しだけをスキップして次の繰り返しへ進みます。
初心者が特に注意したい点は、breakはif文だけの中では使えないこと、多重ループでは一番内側のループだけを抜けること、switch文内のbreakは外側のループを終了しないことです。
breakを正しく使えるようになると、検索処理、入力処理、メニュー処理、無限ループの終了など、実践的なC#プログラムを書きやすくなります。

