5.5. breakとcontinue
breakは、for文やwhile文などの繰り返し処理から抜ける場合や、switch文の処理から抜ける場合に使われます。繰り返しの処理の中で「break;」と記述されている箇所に来ると、それ以降の繰り返しの処理は行わず、その繰り返し処理は終了されます。
★★↓CodeZineのWebフォーマットでは、ソースコード部分に図を上乗せする形で説明できないので、コメントとして読み替えてみました(以下同様)★★。
for (int i = 0; i < 3; i++) {
if (i == 1) {
break; // i ==1の場合、for文から抜ける(【A】へ処理が移る)
}
System.out.println("i=" + i);
}
……それ以降の処理 // 【A】
continueもまたfor文やwhile文などの繰り返し処理の中で使われますが、「continue;」と記述されている箇所にくると、それ以降の繰り返しの処理は行わず、次の繰り返し処理を始めます。
for (int i = 0; i < 3; i++ ) { // 【B】
if (i == 1) {
continue; // i ==1の場合、次の繰り返し処理を行う(【B】の「i++」へ処理が移る)
}
System.out.println("i=" + i);
}
それではサンプルを実行してみてみましょう
package jp.codezine.java.sample03;
/**
* break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
*/
public class BreakAndContinueSample1 {
/**
* break文およびcontinue文を実行し、その内容を確認します。
*
* @param args
* コマンドライン引数。今回は使われません。
*/
public static void main(String[] args) {
System.out.println("------- [1] break -------");
for (int i = 0; i < 3; i++) {
if (i == 1) {
break;
}
System.out.println("i=" + i);
}
System.out.println("------- [2] continue -------");
for (int i = 0; i < 3; i++) {
if (i == 1) {
continue;
}
System.out.println("i=" + i);
}
}
}
------- [1] break ------- i=0 ------- [2] continue ------- i=0 i=2
また、繰り返し構文の中にさらに繰り返し構文がある入れ子の状態の場合、breakもしくはcontinueが影響するのは、それがある繰り返し構文に対して影響します。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) { // 【C】
if (j == 1) {
break; // 内側のfor文に対してbreakします(【C】へ処理が移る)
}
System.out.println("i=" + i + ", j = " + j);
}
}
for (int i = 0; i < 3; i++) { // 【D】
if (i == 1) {
break; // 外側のfor文に対してbreakします(【D】へ処理が移る)
}
for (int j = 0; j < 3; j++) {
System.out.println("i=" + i + ", j = " + j);
}
}
それではサンプルを実行してみましょう
package jp.codezine.java.sample03;
/**
* break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
*/
public class BreakAndContinueSample2 {
/**
* break文およびcontinue文を実行し、その内容を確認します。
*
* @param args
* コマンドライン引数。今回は使われません。
*/
public static void main(String[] args) {
System.out.println("------- [1] ループが入れ子の場合で内ループでのbreak -------");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
System.out.println("j == 1 のとき break");
break;
}
System.out.println("i = " + i + ", j = " + j);
}
}
System.out.println("------- [2] ループが入れ子の場合で内ループでのcontinue -------");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
System.out.println("j == 1 のとき continue");
continue;
}
System.out.println("i = " + i + ", j = " + j);
}
}
System.out.println("------- [3] ループが入れ子の場合で外ループでのbreak -------");
for (int i = 0; i < 3; i++) {
if (i == 1) {
System.out.println("i == 1 のとき break");
break;
}
for (int j = 0; j < 3; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}
System.out.println("------- [4] ループが入れ子の場合で外ループでのcontinue -------");
for (int i = 0; i < 3; i++) {
if (i == 1) {
System.out.println("i == 1 のとき continue");
continue;
}
for (int j = 0; j < 3; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}
}
}
------- [1] ループが入れ子の場合で内ループでのbreak ------- i = 0, j = 0 j == 1 のとき break i = 1, j = 0 j == 1 のとき break i = 2, j = 0 j == 1 のとき break ------- [2] ループが入れ子の場合で内ループでのcontinue ------- i = 0, j = 0 j == 1 のとき continue i = 0, j = 2 i = 1, j = 0 j == 1 のとき continue i = 1, j = 2 i = 2, j = 0 j == 1 のとき continue i = 2, j = 2 ------- [3] ループが入れ子の場合で外ループでのbreak ------- i = 0, j = 0 i = 0, j = 1 i = 0, j = 2 i == 1 のとき break ------- [4] ループが入れ子の場合で外ループでのcontinue ------- i = 0, j = 0 i = 0, j = 1 i = 0, j = 2 i == 1 のとき continue i = 2, j = 0 i = 2, j = 1 i = 2, j = 2
また繰り返し構文にラベルを設定することによりbreakやcontinueを指定したラベルに対して行うこともできます。ラベル名に使える文字は識別子と同様で、対象の制御文の前に「ラベル名」+「:」(コロン)の書式で設定します。
label: for (int i = 0; i < 3; i++) { // 【E】
for (int j = 0; j < 3; j++) {
if (j == 1) {
break label; // 指定したラベルのfor文に対してbreakします(【E】へ処理が移る)
}
System.out.println("i = " + i + ", j = " + j);
}
}
それではサンプルを実行してみましょう。
package jp.codezine.java.sample03;
/**
* break文およびcontinue文のサンプルを実行し、その内容を確認するクラス
*/
public class BreakAndContinueSample3 {
/**
* break文およびcontinue文を実行し、その内容を確認します。
*
* @param args
* コマンドライン引数。今回は使われません。
*/
public static void main(String[] args) {
System.out.println("------- [1] ラベルありループでのbreak -------");
label: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
System.out.println("j == 1 のとき labelに対してbreak");
break label;
}
System.out.println("i = " + i + ", j = " + j);
}
}
System.out.println("------- [2] ラベルありループでのcontinue -------");
label: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
System.out.println("j == 1 のとき labelに対してcontinue");
continue label;
}
System.out.println("i = " + i + ", j = " + j);
}
}
}
}
------- [1] ラベルありループでのbreak ------- i = 0, j = 0 j == 1 のとき labelに対してbreak ------- [2] ラベルありループでのcontinue ------- i = 0, j = 0 j == 1 のとき labelに対してcontinue i = 1, j = 0 j == 1 のとき labelに対してcontinue i = 2, j = 0 j == 1 のとき labelに対してcontinue
5.6. return文
メソッド自体の処理を終了させるのに、戻り値が必要な場合はreturn文で戻り値を返し処理を終了させます。メソッドがvoidの場合は終わらせたい箇所で「return;」と記述することで、それ以降の処理を行わないように終了させることができます。また、戻り値がなく、メソッドの処理を途中で終わらせる必要がない場合は、return文は不要です。
最後に
今回はJavaの主な演算や制御について見てきました。業務アプリの処理も基本的には今まで見てきたものをいろいろと組み合わせて構築されています。後はJavaのクラスやメソッドにどのようなものがあるのか分かるようになれば、ある程度のJavaアプリケーションを作成することは可能かと思います。今回紹介した演算や制御構文の他にもJavaではビット演算やシフト演算などいろいろな演算や制御構文がありますが、一般的な業務アプリで意識して使う機会はあまりありません。一般的な業務アプリで使われる演算や制御の知識は、ここに載せたもので十分かと思います。
参考資料
- The Java Tutorials
- The Java Language Specification Java SE 8 Edition
- Java セキュアコーディングスタンダード CERT/Oracle 版
- 『オラクル認定資格教科書 Javaプログラマ Bronze SE 7』 山本道子 著、翔泳社、2012年12月
- 『オラクル認定資格教科書 Javaプログラマ Silver SE 7』 山本道子 著、翔泳社、2013年1月
