Javaコラム Javaエンジニアのためのお役立ちコラム

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

 
Javaのbreak文の使い方とは?| 多重ループをbreakで抜ける方法を知ろう
SE
break文はどういうときに使うのですか。
PM
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コードです。

実行結果は、次のようになります。i=2の繰り返しが途中で終了していることがわかります。

whileループからbreak

whileループ内にbreak文を記述したJavaコードの例を示します。

実行結果は、次のようになります。i=2の繰り返しの途中で、ループが終了していることがわかります。

 

do-while文の場合も同様ですので、コードを書いて試してください。

switch文でのbreakの使い方

switch文は、case節により、処理を分岐させる構文です。ある値による分岐条件の場合分けが多い場合に使います。

以下では、Javaのswitch文におけるbreakの使い方を、例をあげて説明します。

case処理の最後にはbreakを記述

switch文の各case処理の最後には、break文をおきます。

switch文のJavaコード例を示します。

 

この例では、変数valの値が1のとき、2のとき、その他のとき(default)で、処理を分けています。もしvalの値が2ならば、case 2に分岐して処理を行った後、breakの実行によりswitch文を抜けます。valの値が2の場合の実行結果は、次のようになります。

switch文でbreakを省略する

Javaのswitch文でbreakを省略すると、そのまま次のcaseの処理を実行します。caseは単なるラベルなので、制御の流れは変わらないからです。

意図的にbreakを省略したswitch文を書くときもあります。次のコード例を用いて説明します。

上のコードでは、valの値が1と2の場合には同じ処理をするため、case1の後にはbreak文を置かず、case2に進みます。このように複数のcaseをまとめる書き方は、しばしば利用されます。

valの値が3と4のときには同じような処理をするが、3の場合だけ前処理が必要だとします。上のコードでは、3と4の処理の共通部をcase4の下に記述することで、処理を実現しています。valの値が3の場合の実行結果は、次のようになります。

 

このような記述方法は、わかりにくく、バグの原因となりやすいので、あまり使わない方がいいでしょう。もし使う場合には、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)で条件を満たす場合の実行結果は、次のようになります。

ラベル付き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つのループを一気に抜けていることがわかります。

SE
多重ループをbreakで抜けるには、1つずつbreakする方法と、ラベル付きbreakで一気に抜ける方法があるのですね。
PM
そのとおりです。コード例を参考にして、ぜひご自身で試してみてください。

Javaのbreak文を使いこなそう

ループやswitch文を抜け出し、制御の流れを変えるために使うJavaのbreak文の使い方を解説しました。

多重ループを一気に抜けられるラベル付きbreakについても述べました。コード例を参考に、break文を使うコードを色々と試してみてください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags