【6日でできるJava入門】制御文⑥ ループの制御

 プログラムで繰り返し処理(ループ)を制御するためには、breakcontinueといった特別なキーワードを使います。これらを使うことで、ループの途中で処理を終了したり、特定の条件下で一部の処理をスキップすることができます。ここでは、その基本的な使い方から応用までを例題付きで解説します。


1.break文によるループの中断

1.1. break文の基本構文と使用例

  • break文は、今実行中のループから即座に抜ける命令です。
  • 主に「目的の値が見つかった時点でループを中断したい」ときなどに使います。

サンプルプログラム:特定値の探索

ファイル名: lesson13_1.java

public class lesson13_1 {
    public static void main(String[] args) {
        int[] data = {1, 2, 3, 3, 2, 5, 6, 7, 1, 0, 3, 1, 4, 8, 2, 5};
        int i;
        for (i = 0; i < data.length; i++) {
            if (data[i] == 8) {
                break;
            }
        }
        System.out.println("8は配列の " + i + " 番目に見つかりました。");
    }
}

実行結果

8は配列の 13 番目に見つかりました。

1.2. ラベル付きbreak文(多重ループからの脱出)

  • 多重ループ(ループの入れ子)では、break一番内側のループしか抜けません。
  • 複数のループから一気に抜けたいときは、「ラベル」をつけてbreak文を使います。

ファイル名: lesson13_2.java

public class lesson13_2 {
    public static void main(String[] args) {
        outer:
        for (int i = 0; i < 50; i++) {
            for (int j = 0; j < 50; j++) {
                if (i * j == 391) {
                    System.out.println(i + " * " + j + " = 391");
                    break outer;
                }
            }
        }
    }
}

実行結果

17 * 23 = 391

2.continue文によるループのスキップ

2.1. continue文の基本構文と使用例

  • continue文は、その回のループの残りの処理をスキップして、次の繰り返しに進む命令です。
  • 主に「条件を満たさない場合は何もしないで、次のループに進みたい」ときに使います。

サンプルプログラム:特定値のカウントと位置表示

ファイル名: lesson13_3.java

public class lesson13_3 {
    public static void main(String[] args) {
        int[] data = {1, 2, 3, 3, 2, 5, 6, 7, 1, 0, 3, 1, 4, 8, 2, 5};
        int count = 0;
        for (int i = 0; i < data.length; i++) {
            if (data[i] != 3)
                continue; // 3でなければスキップ
            count++;
            System.out.println("3は " + i + " 番目にあります。");
        }
        System.out.println("3の出現回数: " + count + " 回");
    }
}

実行結果

3は 2 番目にあります。
3は 3 番目にあります。
3は 10 番目にあります。
3の出現回数: 3 回

2.2. ラベル付きcontinue文

  • ラベルを使うことで、多重ループの特定のループの先頭に戻ることも可能です。
  • ただし、複雑になりやすいので注意が必要です。

ファイル名: lesson13_4.java

public class lesson13_4 {
    public static void main(String[] args) {
        outer:
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (i == j) continue outer;
                System.out.println("i=" + i + ", j=" + j);
            }
        }
    }
}

実行結果

i=2, j=1
i=3, j=1
i=3, j=2

表:breakとcontinueのまとめ

制御文動作用途例
breakループを途中で完全に抜ける。条件一致で繰り返し処理を中断したいとき
continueその回の処理をスキップし、ループの次の繰り返しへ。一部の条件だけ処理を実行したくないとき
ラベル付き多重ループで外側や特定のループにも対応複雑な入れ子ループから特定の場所に戻る時

まとめ

  • breakはループ自体を抜ける、continueはその回の処理だけスキップする。
  • ラベル付きbreak/continueで多重ループの制御も可能
  • どちらも使い過ぎはプログラムの可読性を下げるため、シンプルな構造を心がける。