目次
breakとは
Javaで使われるbreak文は、ループ文(for文やwhile文)やswitch文などを途中で抜けるために使う構文です。
breakを囲んでいる1番内側の繰り返しブロックが、中断されます。
break文の使い方
break文の使い方は簡単です。
ループ文やswitch文で処理を中断したい位置に記述します。
breakしたい条件を if文 を使うことで、条件をつけた処理が実行可能です。
では実際に、プログラムを書いて動きを確認してみましょう!
for文をbreakで中断
for文を使って、iが5になったところでbreakしてみます。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 10; i++){ if (i == 5) { break; } System.out.println(i); } } } ■実行結果 mbp:Desktop potepan$ java Main 1 2 3 4
上記のように、1〜4までの間はprint文でiの値を表示させています。
そしてループが5になったところでif文の条件に合致し、break文が動作します。
for文を途中で抜けて、以降の処理が実行されなくなりました。
while文をbreakで中断
while文でも同様の処理が記述可能です。
■記述例 public class Main{ public static void main(String[] args){ int i = 1; while (i < 10){ if (i == 5) { break; } System.out.println(i); i++; } } } ■実行結果 mbp:Desktop potepan$ java Main 1 2 3 4
一連の処理の動作もfor文と同じです。
このように、条件をうまく設定すれば任意の条件・場所で処理を中断できます。
使い方を覚えておくことで、複雑な条件分岐も設定可能です。
次に、ネストされたループをスキップする方法を見ていきましょう。
breakでネスト(入れ子構造)されたループをスキップ
for文が1つしかない処理の場合は、while文でも同じように使えました。
しかし、for文をネストにした場合は、breakの書き方に気をつける必要があります。
書き方によっては、意図しない動作になりかねないからです。
例えば、以下のようなプログラムを作ったとしましょう。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 5; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { break; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } } ■実行例 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の2回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の3回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の4回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の5回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
上記のプログラムが、1つ目のfor文の中に2つ目のfor文があります。
そして、2つ目のfor文でbreak文を使い、jが3になったら処理を中断するよう指示していますね。
実行結果のように、2つ目のfor文は2回目の処理までを処理しています。
そのため、2つ目のfor文を中断するだけで、全体としてforループ(1つ目のfor文)は止まりません。
iが5になるまで全体の処理が進んでいるのがわかります。
もし、このプログラムをjが3になった時点で、すべて終了させるにはどうしたら良いでしょうか。
簡単な方法としては、1つ目のfor文にもbreakを記述することです。
次のように記述できます。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 5; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { break; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } break; } } } ■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
意図した実行結果になっているのがわかります。
さらに、1つ目のfor文にも条件をつける場合は、2つ目のfor文同様にif文を設定すればOKです。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 5; i++){ if (i == 3) { break; } System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { break; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } } ■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の2回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
このようにfor文をネストにした場合は、breakの記述は意図した動作になるよう注意しながら設定が必要です。
ラベル付きbreak文でネストをスキップ
前章で、ネストされたループのスキップ方法を紹介しました。
実は、ラベル付きbreak文を使うことでもっと簡単にループを中断できます。
ここでは、ラベル付きbreak文でネストをスキップ方法を見ていきましょう。
Javaのラベルとは、プログラム上の目印のようなものです。
ラベル名を処理に付けることで、ラベルと一致するものに処理を移せるようになります。
文章で説明されてもイメージしづらいと思うので、実際に動かして確認しましょう!
以下のようにプログラムの記述を変更しました。
■記述例 public class Main{ public static void main(String[] args){ loop: for (int i = 1; i <= 5; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { break loop; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } }
1つ目のfor文の前に「loop:」が追加されていますね、これがラベルです。
そして、breakの後ろにも「loop」と記述されています。
通常であれば、break文が実行されたときに、break文を含む一番内側のブロックを抜ける処理に入ります。
一方、ラベルを付けることで、ラベルを付けた任意のブロック処理を中断できるようになるのです。
つまり、上記のプログラムで言うと、2つ目のfor文のjが3になった時点で、1つ目のfor文をスキップすることになります。
実行結果を見てみると、次の通りです。
■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
このように、意図した動作になっていますね!
ラベル付きbreak文を利用すると、どこのブロックを中断するのかコードを見てわかりやすくなるメリットがあります。
多用は禁物ですが、多重ループのときなどに積極的に活用してみると良いでしょう!
ラベル付きbreak文で、ネストを任意のブロックで中断できます!
ブロックに「ラベル名:」を、そしてbreak文に「break ラベル名」を記述して使いましょう!
break文とcontinue文の違い
breakと合わせて「continue」という言葉も聞きます。違いはなんですか?
breakが処理を中断するのに対し、continueは処理を中断した上で、次の周回に進む処理です。それぞれ処理を確認してみましょう!
ここでは、break文とcontinue文の違いを確認します。
上記の説明通り、continue文は処理の中断後に次の周回に進む構文です。
実際に、同じプログラムでbreakとcontinueの動きを確認してみましょう。
まずは、break文です。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 3; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { break; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } } ■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の2回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 1つ目のfor文の3回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
2つ目のfor文は3回目で中断が入っていますね。
今度は、continue文を実行してみます。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 3; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { continue; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } } ■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 2つ目のfor文の4回目の処理です! 2つ目のfor文の5回目の処理です! 1つ目のfor文の2回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 2つ目のfor文の4回目の処理です! 2つ目のfor文の5回目の処理です! 1つ目のfor文の3回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です! 2つ目のfor文の4回目の処理です! 2つ目のfor文の5回目の処理です!
このように、continue文では2つ目のfor文の「3回目」だけがスキップされ、1・2・4・5の処理は実行されているのがわかります。
break文は、指定した条件以降の処理を中断する。
continue文は、指定した条件だけの処理を中断する。
breakとreturnの違い
breakとreturnは何が違うんですか?
breakは任意の1ブロックをスキップするのに対し、returnはすべてのブロックをスキップします!
こちらも実際に動かして確認しましょう。
break文は「break文とcontinue文の違い」で紹介した動きと同様です。
ここでは、returnにしたときの動きを確認します。
■記述例 public class Main{ public static void main(String[] args){ for (int i = 1; i <= 3; i++){ System.out.println("1つ目のfor文の" + i + "回目の処理です!"); for (int j = 1; j <= 5; j++) { if (j == 3) { return; } System.out.println("2つ目のfor文の" + j + "回目の処理です!"); } } } } ■実行結果 mbp:Desktop potepan$ java Main 1つ目のfor文の1回目の処理です! 2つ目のfor文の1回目の処理です! 2つ目のfor文の2回目の処理です!
「ラベル付きbreak文でネストをスキップ」で紹介したときと同じように、1つ目のfor文も中断されていますね。
breakとは異なり、returnはすべての処理をスキップできる構文です!
returnは、すべてのブロックをスキップします!
breakをswitch文で使う
ここまで、break文をfor文、while文を使って紹介してきました。
breakはswitch文でもよく見られる構文です。
■記述例 public class Main{ public static void main(String[] args){ int i = 2; switch(i) { case 1: System.out.println("iは1です!"); break; case 2: System.out.println("iは2です!"); break; case 3: System.out.println("iは3です!"); break; default: System.out.println("iは1、2、3ではありません!"); } } } ■実行結果 mbp:Desktop potepan$ java Main iは2です!
breakの動きは、ここまで説明してきた通りです。
条件に当てはまったときに、処理を中断します。
より詳しくswitch文の使い方を知りたい場合は、以下の記事を参考にしてみてください!
【関連記事】
▶︎【まとめ】Javaのswitch-case文の使い方をサンプル付きで解説!
breakの使い方まとめ
Javaのbreak文について解説しました。
for文やwhile文などのループ文や、switch文などでbreakは活躍します。
使い方を覚えることで、任意の条件で処理を中断でき便利です。
ぜひこの記事を参考に、breakの使い方を覚えてみてくださいね!
全体としてのループを終了させるときは、1つ目のfor文でもbreakを記述する!
終了条件を設定するにはif文を使う!