こんにちは!エンジニアの中沢です。
プログラミングをしているとループ処理を行うことってよくありますよね。ループ処理を記述していて、
二重ループで外側のループまで抜けたい
ラベル付きbreak文の使い方を知りたい
ループ処理をスキップしたい
などで悩むことはありませんか?
今回はそんな悩みを解決するbreak文とcontinue文についてです。
この記事では、break文とcontinue文について
- break文とcontinue文
- for文のループをbreak文で抜ける方法
- for文のループをcontinue文でスキップする方法
という基本的な内容から
- ラベル付きbreak文で2重ループを抜ける方法
- 拡張for文やiteratorのループ処理
などの応用的な内容についても解説していきます。
この記事では、for文のループをbreak文で抜ける方法や、continue文でスキップする方法をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
break文とcontinue文
初めにbreak文とcontinue文について解説します。
break文とは
break文はループ処理を中断して、途中で抜けるときに使用します。break文は最も内側の1つのループから抜け出します。
多重ループの外側まで抜ける場合は、ラベル付きbreak文を使います。
continue文とは
continue文はループ処理の途中で、残りの処理をスキップして次のループ処理に移るときに使います。
break文はループ処理全体を終わらせてしまうのに対して、continue文は残りの処理をスキップした後に次のループ処理を開始するという違いがあります。
continue文は最も内側の1つのループをスキップします。多重ループのネストの外側までスキップする場合には、ラベル付continue文を使います。
for文のループをbreak文で抜ける方法
ここではfor文のループをbreak文で抜ける方法を解説します。for文のループをbreak文で抜けるには下記のように記述します。
break文の記述例:
for (式) { if (条件式) { 処理内容; break; } }
条件式が真の場合break文が実行されるので、そこでループ処理を中断してループから抜け出します。
break文の使い方を覚えるために次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { String[] strArray = { "s", "a", "m", "u", "r", "a", "i" }; String str = "a"; for (int i = 0; i < strArray.length; i++) { if (strArray[i].equals(str)) { System.out.println(str + "のインデックス番号 = " + i); break; } } } }
実行結果:
aのインデックス番号 = 1
このプログラムでは、文字列の配列から”a”が見つかるまでループ処理をしています。1番目の”a”が見つかった時点でbreak文を使ってループを抜けているので、配列の中の2番目の”a”の位置は表示されません。
このようにbreak文を使ってループ処理から抜け出すことができています!
ラベル付きbreak文で2重ループを抜ける方法
ここでは多重ループをラベル付きbreak文で抜ける方法を解説します。ラベル付きbreak文で2重ループを抜けるには下記のように記述します。
二重ループをラベル付きbreak文で抜ける記述例:
ラベル: for (式1) { for (式2) { if (条件式) { 処理内容 break ラベル; // ラベル付きbreak文 } } }
ラベル付きbreak文を使うと、同じラベルをつけたfor文の外までループを抜けます。この場合はラベルが付いたfor文すなわち式1のfor文のループから抜け出します。
次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { String[] strArray1 = { "s", "a", "m", "u", "r", "a", "i" }; String[] strArray2 = { "e", "n", "g", "i", "n", "e", "e", "r" }; String str1 = "a"; String str2 = "e"; // ラベル loop: for (int i = 0; i < strArray1.length; i++) { for (int j = 0; j < strArray2.length; j++) { if (strArray1[i].equals(str1) && strArray2[j].equals(str2)) { System.out.println(str1 + "のインデックス番号 = " + i); System.out.println(str2 + "のインデックス番号 = " + j); break loop; // ラベル付きbreak文 } } } } }
実行結果:
aのインデックス番号 = 1 eのインデックス番号 = 0
このプログラムでは2重ループで2つの配列から目的の文字をそれぞれ探しています。
目的の文字が見つかった時点でラベル付きbreak文を使って2重ループを抜けているので、配列の中の2番目の文字の位置は表示しません。
このようにラベル付きbreak文を使って多重ループから抜け出すことができています!
for文のループをcontinue文でスキップする方法
次はfor文のループをcontinue文でスキップする方法を解説します。for文のループをcontinue文でスキップするには下記のように記述します。
continue文の記述例:
for (式) { if (条件式) { continue; } 処理内容; }
条件式が真の場合continue文が実行され、ループ処理がスキップされ実行されません。
continue文の使い方を覚えるために次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { String[] strArray = { "s", "a", "m", "u", "r", "a", "i" }; String str = "a"; for (int i = 0; i < strArray.length; i++) { if (!strArray[i].equals(str)) { continue; } System.out.println(str + "のインデックス番号 = " + i); } } }
実行結果:
aのインデックス番号 = 1 aのインデックス番号 = 5
このプログラムでは文字列が”a”以外のときに、continue文で表示する処理をスキップしています。continue文でループ処理をスキップする方法が確認できています!
なお、continue文についてもbreak文と同じ様にラベル付きcontinue文を使うことができます。ラベル付きcontinu文などの詳しい説明についてはこちらを参考にしてくださいね!
拡張for文やiteratorのループ処理
拡張for文やiteratorのループ処理について詳しく知りたいときはこちらの記事を参考にしてください!
for文の使い方総まとめ
for文についてさらに詳しく知りたいときはこちらの記事を確認してください!
まとめ
ここでは、break文やcontinue文について解説してきましたがいかがでしたか?
ラベル付きbreak文で2重ループを抜ける場合、ラベルの位置を間違えると期待通りにループを抜けられないので注意してくださいね。
もしfor文のループをbreak文で抜ける方法やcontinue文でスキップする方法を忘れてしまったらこの記事を確認してください!