Javaのbreak文の使い方とは?| 多重ループをbreakで抜ける方法を知ろう

- システム
エンジニア - break文はどういうときに使うのですか。
- プロジェクト
マネージャー - break文はfor文、while文、do-while文のループ構造やswitch文の中で使います。
break文とは?
Javaのbreak文は、ループやswitch文を抜け出すときに使う文です。制御の流れを変えるために使います。break文は、for文、while文およびdo-while文のループ構造と、switch文の中で使います。
以下では、それぞれの文について、プログラム例をあげながら、break文の使い方を解説していきます。
ループからbreakする方法
Javaのループ本体の処理中でbreak文を実行すると、break文が属する内側ループの外に制御が移り、ループを終了します。
ループの種類には、for、while、do-whileがあります。
for文からbreak
ループカウンタiのforループ内で、配列aの要素a[i]の値をチェックし、値が10を超えたらループを抜ける処理を記述したのが、次に示すJavaコードです。
1
2
3
4
5
6
7
8
9
10
11
12
|
int a[] = {0, 10, 20, 30, 40, 50};
// forループをbreakで抜ける
for (int i = 0; i < a.length; i++) {
System.out.println(""i = "" + i + ""の処理 (前半) を行う"");
if (a[i] > 10) {
System.out.println(""i = "" + i + ""でループを抜ける"");
break;
}
System.out.println(""i = "" + i + ""の処理(後半)を行う"");
}
|
実行結果は、次のようになります。i=2の繰り返しが途中で終了していることがわかります。
1
2
3
4
5
6
7
8
|
i = 0の処理 (前半) を行う
i = 0の処理(後半)を行う
i = 1の処理 (前半) を行う
i = 1の処理(後半)を行う
i = 2の処理 (前半) を行う
i = 2でループを抜ける
|
whileループからbreak
whileループ内にbreak文を記述したJavaコードの例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
int a[] = {0, 10, 20, 30, 40, 50};
// whileループをbreakで抜ける
int i = 0;
while (i < a.length) {
if (a[i] > 10) {
System.out.println(""i = "" + i + ""でループを抜ける"");
break;
}
System.out.println(""i = "" + i + ""の処理を行う"");
i++;
}
|
実行結果は、次のようになります。i=2の繰り返しの途中で、ループが終了していることがわかります。
1
2
3
4
5
|
i = 0の処理を行う
i = 1の処理を行う
i = 2でループを抜ける
|
do-while文の場合も同様ですので、コードを書いて試してください。
switch文でのbreakの使い方
switch文は、case節により、処理を分岐させる構文です。ある値による分岐条件の場合分けが多い場合に使います。
以下では、Javaのswitch文におけるbreakの使い方を、例をあげて説明します。
case処理の最後にはbreakを記述
switch文の各case処理の最後には、break文をおきます。
switch文のJavaコード例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
switch (val) {
case 1:
System.out.println(""valが 1 の処理を行う"");
break;
case 2:
System.out.println(""valが 2 の処理を行う"");
break;
default:
System.out.println(""valが 1,2 以外の処理を行う"");
break;
}
|
この例では、変数valの値が1のとき、2のとき、その他のとき(default)で、処理を分けています。もしvalの値が2ならば、case 2に分岐して処理を行った後、breakの実行によりswitch文を抜けます。valの値が2の場合の実行結果は、次のようになります。
1
2
3
|
valが 2 の処理を行う
|
switch文でbreakを省略する
Javaのswitch文でbreakを省略すると、そのまま次のcaseの処理を実行します。caseは単なるラベルなので、制御の流れは変わらないからです。
意図的にbreakを省略したswitch文を書くときもあります。次のコード例を用いて説明します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// breakを意図的に省略したswitch文
switch (val) {
case 1: // case 2と同じ処理へ
case 2:
System.out.println(""valが 1,2 の処理を行う"");
break;
case 3:
System.out.println(""valが 3 の処理を行う"");
// breakしないで case4へ
case 4:
System.out.println(""valが 3と4 の処理を行う"");
break;
default:
System.out.println(""valが 1,2,3,4 以外の処理を行う"");
}
|
上のコードでは、valの値が1と2の場合には同じ処理をするため、case1の後にはbreak文を置かず、case2に進みます。このように複数のcaseをまとめる書き方は、しばしば利用されます。
valの値が3と4のときには同じような処理をするが、3の場合だけ前処理が必要だとします。上のコードでは、3と4の処理の共通部をcase4の下に記述することで、処理を実現しています。valの値が3の場合の実行結果は、次のようになります。
1
2
3
4
|
valが 3 の処理を行う
valが 3と4 の処理を行う
|
このような記述方法は、わかりにくく、バグの原因となりやすいので、あまり使わない方がいいでしょう。もし使う場合には、breakの省略箇所に必ずコメントを入れましょう。
多重ループをbreakで抜ける方法
Javaのループ内のbreak文は、break文を囲む最も内側のループを抜け出します。break文で多重ループを抜け出したい場合には、どのような記述方法があるでしょうか。
ここでは、breakでループを1つずつ抜ける方法と、ラベル付きbreakで一気に抜ける方法を説明します。
多重ループを1つずつbreakする
多重ループの内側でbreak文を実行すると、ループ1つ分しか抜け出しません。さらに外側ループを抜け出すには、break条件を満たしたことをフラグに設定しておき、外側ループ内でまたbreakを実行する必要があります。
次に示すJavaコードの例では、内側ループを抜けるbreak文の直前で、フラグ変数をtrueに設定しています。内側ループの直後では、このフラグがセットされていたら外側ループをbreakします。
boolean break_flag = false;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (a[i][j] < 0) {
System.out.println(“”!!! (i,j)=(“”+i+””,””+j+””) でjループを抜ける””);
break_flag = true;
break; // 内側ループを抜けます
}
sum += a[i][j];
}
if (break_flag) {
System.out.println(“”!!! i=”” + i + “” でiループを抜けます””);
break; // 外側ループを抜ける
}
System.out.println(“”i=”” + i + “” の処理を終了””);
}
System.out.println(“”2重ループを終了””);
(i,j)=(2,3)で条件を満たす場合の実行結果は、次のようになります。
1
2
3
4
5
6
7
|
i=0 の処理を終了
i=1 の処理を終了
!!! (i,j)=(2,3) でjループを抜けます
!!! i=2 でiループを抜けます
2重ループを終了
|
ラベル付きbreakで多重ループを抜ける
外側のループまで一気に抜けるには、ラベル付きのbreak文を使う方法があります。抜けたい対象ループにラベルを付けておき、「break ラベル名;」のように記載すると、ラベルの付いたループを抜け出し、ループ後のコードに制御が移ります。
次のコード例では、外側のforループにLOOP_Iというラベルを付加しています。内側の「break LOOP_I;」を実行すると、外側ループを終了します。
LOOP_I:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (a[i][j] < 0) {
System.out.println(“”!!! (i,j)=(“”+i+””,””+j+””) でLOOP_Iを抜けます””);
break LOOP_I; // 外側ループを抜ける
}
sum += a[i][j];
}
System.out.println(“”i=”” + i + “” の処理を終了””);
}
System.out.println(“”2重ループを終了””);
上のコードの実行結果は、次のようになり、2つのループを一気に抜けていることがわかります。
1
2
3
4
5
6
|
i=0 の処理を終了
i=1 の処理を終了
!!! (i,j)=(2,3) でLOOP_Iを抜けます
2重ループを終了
|
- システム
エンジニア - 多重ループをbreakで抜けるには、1つずつbreakする方法と、ラベル付きbreakで一気に抜ける方法があるのですね。
- プロジェクト
マネージャー - そのとおりです。コード例を参考にして、ぜひご自身で試してみてください。
Javaのbreak文を使いこなそう
ループやswitch文を抜け出し、制御の流れを変えるために使うJavaのbreak文の使い方を解説しました。
多重ループを一気に抜けられるラベル付きbreakについても述べました。コード例を参考に、break文を使うコードを色々と試してみてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)