ループを自由自在に!breakとcontinueで繰り返しを操ろう

docs

前回の記事(繰り返し処理の強い味方! while文とdo-while文を使いこなそう! | ToolDocs  ←ここをクリックしてね!)では、Javaの繰り返し処理、いわゆる「ループ」について熱く語り合ったよね。for文とかwhile文とか、みんなもうバッチリ使いこなせてるかな?

今回は、そのループをさらにパワーアップさせる、**「break」「continue」**という2つの便利なキーワードを紹介するよ!こいつらを使えば、ループを途中で止めたり、特定の処理だけスキップしたりと、まるで手品みたいにループを制御できるようになるんだ!

さあ、早速その魔法を見ていこう!

break文:ループをぶっちぎり!

まずはbreak文から!こいつはね、ループの中に書くと、そのbreak文が実行された瞬間に、そのループ自体を完全に終了させちゃう、っていう超強力なコマンドなんだ。

例を見てみよう。

Java

public class BreakSample {
    public static void main(String[] args) {
        System.out.println("break文の例を見てみよう!");

        for (int i = 0; i < 10; i++) {
            System.out.println("現在のiの値: " + i);
            if (i == 5) {
                System.out.println("iが5になったので、ループを終了します!");
                break; // iが5になったら、ループをぶっちぎる!
            }
        }
        System.out.println("ループが終わりました。");
    }
}

このコードを実行するとどうなると思う?

break文の例を見てみよう!
現在のiの値: 0
現在のiの値: 1
現在のiの値: 2
現在のiの値: 3
現在のiの値: 4
現在のiの値: 5
iが5になったので、ループを終了します!
ループが終わりました。

ね、iが5になった瞬間に「ループを終了します!」って表示されて、それ以降のiの値(6, 7, 8, 9)は一切表示されてないでしょ?これがbreak文の力なんだ!

どんな時に使うかって?例えば、

  • ユーザーが何か特定の入力をしたら、処理を中断したい時
  • データの検索中に、目的のデータが見つかったら、それ以上検索する必要がない時

なんて時に大活躍するよ!

paizaで実行した結果

continue文:ちょっとだけ休憩、次のターンへGO!

お次はcontinue文!break文がループ全体を終わらせるのに対して、continue文は、現在のループの1周だけをスキップして、次の周回(イテレーション)に移る、っていう働きをするんだ。

これも例で見てみよう。

Java

public class ContinueSample {
    public static void main(String[] args) {
        System.out.println("continue文の例を見てみよう!");

        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) { // iが偶数だったら
                System.out.println(i + "は偶数なのでスキップします!");
                continue; // 現在の周回をスキップして、次の周回へGO!
            }
            System.out.println("現在のiの値 (奇数です): " + i); // 奇数の時だけ表示される
        }
        System.out.println("ループが終わりました。");
    }
}

このコードを実行すると、こんな感じになるよ!

continue文の例を見てみよう!
0は偶数なのでスキップします!
現在のiの値 (奇数です): 1
2は偶数なのでスキップします!
現在のiの値 (奇数です): 3
4は偶数なのでスキップします!
現在のiの値 (奇数です): 5
6は偶数なのでスキップします!
現在のiの値 (奇数です): 7
8は偶数なのでスキップします!
現在のiの値 (奇数です): 9
ループが終わりました。

見てみて!iが偶数のときは、「〇は偶数なのでスキップします!」って表示されて、その下の「現在のiの値 (奇数です)」っていう行は実行されてないよね。でも、ループ自体はちゃんと最後まで(iが9になるまで)回ってる!これがcontinue文の動きなんだ。

どんな時に使うかっていうと、

  • ループの中で、特定の条件を満たす場合は、その後の処理をせずに次のデータに進みたい時
  • エラーデータだけをスキップして、正常なデータだけを処理したい時

なんかに便利だよ!

paizaで実行した結果

breakとcontinue、使い分けが肝心!

ここまでbreakcontinueを見てきたけど、それぞれの違いと使い分けが重要だよね。

  • break ループを完全に終わらせたい時に使う。もうそのループの中の処理は一切不要!って時。
  • continue ループの特定の周回だけをスキップしたい時に使う。ループ自体は続けたいけど、今回のデータだけは特別扱いしたい!って時。

イメージとしては、breakは「緊急停止ボタン」、continueは「一時停止ボタン」って感じかな。

ちょっと応用編:while文でも使ってみよう!

もちろん、for文だけじゃなくてwhile文でもbreakcontinueは使えるよ!

while文でのbreak

Java

import java.util.Scanner; // スキャナを使ってみよう!

public class WhileBreakSample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // ユーザーからの入力を受け取る準備
        String input;

        System.out.println("何か入力してください。「exit」と入力すると終了します。");

        while (true) { // 無限ループ!でも心配しないで、breakで止めるから!
            System.out.print("> ");
            input = scanner.nextLine(); // ユーザーの入力を読み込む

            if (input.equals("exit")) {
                System.out.println("「exit」が入力されました。プログラムを終了します。");
                break; // 「exit」が入力されたら無限ループをぶっちぎる!
            }
            System.out.println("入力された内容: " + input);
        }
        scanner.close(); // スキャナを閉じるのを忘れずに!
        System.out.println("プログラムが終了しました。");
    }
}

このコードを実行すると、あなたが「exit」と入力するまで、ずっと入力待ちの状態になるよ。これでユーザーとの対話形式のプログラムも作れそうだね!

while文でのcontinue

Java

public class WhileContinueSample {
    public static void main(String[] args) {
        int num = 0;

        System.out.println("while文のcontinue文の例を見てみよう!");

        while (num < 10) {
            num++; // まずはnumをインクリメント!
            if (num % 3 == 0) { // numが3の倍数だったら
                System.out.println(num + "は3の倍数なのでスキップ!");
                continue; // 現在の周回をスキップして、次の周回へGO!
            }
            System.out.println("現在のnumの値: " + num);
        }
        System.out.println("ループが終わりました。");
    }
}

このコードでは、numが3の倍数の時は「〇は3の倍数なのでスキップ!」と表示され、その下のSystem.out.println("現在のnumの値: " + num);は実行されずに次のループに移るよ。

paizaで実行した結果

ネストされたループとbreak/continue(おまけだよ!)

ループの中にループがある、いわゆる「ネストされたループ」の場合、breakcontinueは、最も内側のループにしか作用しないんだ。

Java

public class NestedLoopBreakSample {
    public static void main(String[] args) {
        System.out.println("ネストされたループとbreakの例");

        outerLoop: // 外側のループにラベルを付ける(おまけ)
        for (int i = 0; i < 3; i++) {
            System.out.println("外側のループ: i = " + i);
            for (int j = 0; j < 3; j++) {
                System.out.println("  内側のループ: j = " + j);
                if (i == 1 && j == 1) {
                    System.out.println("    iが1、jが1になったので、内側のループを終了します!");
                    break; // 内側のループだけが終了する
                    // break outerLoop; // こう書くと外側のループも終了できる(ちょっと難しいから今は覚えなくてOK!)
                }
            }
        }
        System.out.println("全てのループが終わりました。");
    }
}

この例だと、iが1でjが1になったら内側のループだけが終了して、外側のループは引き続き回るよ。

もし「外側のループごと終了させたい!」って場合は、break outerLoop;のように**ラベル付きbreak**を使うんだけど、これはちょっと応用的な使い方だから、今は「へ〜、そんなこともできるんだ」くらいに思っておいて大丈夫だよ!

paizaで実行した結果

まとめ!

今回はJavaの繰り返し処理をさらに便利にするbreakcontinueについて学んだね!

  • break ループを完全に終了させる魔法の呪文。
  • continue ループの現在の周回だけをスキップして、次の周回に進む魔法の呪文。

この2つのキーワードを使いこなせれば、君のプログラムはもっと柔軟で賢くなること間違いなし!

たくさんコードを書いて、実際に動かしてみて、このbreakcontinueの動きを肌で感じてみてほしいな!

何か質問があったらいつでもコメントしてね!

コメント

タイトルとURLをコピーしました