Java Break ステートメント: ループから抜け出す

Java Break ステートメント: ループから抜け出す

 
 
場合によっては、ループ条件が false になるまでループを終了するのを待つのではなく、特定の条件が発生したときにループを強制的に終了することが必要になることがあります。この時点で、break を使用してこの関数を完了できます。

 

Break はループを完全に終了し、ループ本体から飛び出すために使用されます。どのような種類のループであっても、ループ本体でブレークが検出されると、システムはループを完全に終了し、ループの後のコードの実行を開始します。

Javaでは、break 文には 3 つの機能があります。switch 文で一連の文を終了する機能、break 文を使用して直接ループを強制終了する機能、および Break 文を使用して goto の機能を実現する機能です。

ループを直接強制的に終了するには、break ステートメントを使用します (break にはラベルがありません)。

Break ステートメントを使用すると、ループ本体内の他のステートメントやループの条件判定を無視して、ループを強制的に終了できます。ループ内で Break ステートメントが見つかると、ループは終了し、ループに続くステートメントが最初から始まります。

例1

Yamadaは 1000 メートルの長距離レースに参加しました。100 メートルのトラックを円を描いて走りました。1 周するたびに、残りの距離は 100 メートル減ります。走る周回数はサイクル数。しかし、周回ごとにコーチが「頑張りますか?」と尋ね、「y」と答えれば走り続けるが、そうでなければ諦める。

Break ステートメントを使用してループを強制的に終了する例は次のとおりです。

 public static void main(String[] args) {
    Scanner input = new Scanner(System.in); // 変数を定義して小明の回答を格納します。
    String answer = ""; // 1周100メートル、1000メートルは10周回るため、ループの回数は10回です。
    for (int i = 0; i < 10; i++) {
        System.out.println("第" + (i + 1) + "周目です。");
        System.out.println("まだ続けられますか?"); //小明の回答を取得します。
        answer = input.next(); //小明の回答が y ではない場合、放棄してループを中断します。
        if (!answer.equals("y")) {
            System.out.println("諦める");
            break;
        }
        //ループの後の処理
        System.out.println("頑張って!続けてください!");
    }
} 

Break ステートメントは、意図的な無限ループを含む任意の Java ループで使用できます。一連のネストされたループで Break ステートメントを使用すると、最も内側のループのみが終了します。例えば:

 public static void main(String[] args) {
    // Outer loop to run 5 times
    for (int i = 0; i < 5; i++) {
        System.out.print("第" + (i + 1) + "回目のループ:");

        // Inner loop to run 10 times
        for (int j = 0; j < 10; j++) {
            // If j is equal to 3, stop the loop
            if (j == 3) {
                break;
            }
            System.out.print("内側ループの第" + (j + 1) + "回目のループ\t");
        }
        System.out.println();
    }
} 

プログラムの実行結果から判断すると、内側のループのbreak文は内側のループを終了するだけで、外側のループには何の影響もありません。

注:ループ内には複数の Break ステートメントを含めることができますが、break ステートメントが多すぎるとコード構造が破壊されます。 switch ループ ステートメント内のブレークは、switch ステートメントにのみ影響し、ループには影響しません。

例 2

ユーザーが 6 つのコースの成績を入力できる Java プログラムを作成します。入力された成績が負の場合はループから抜け出し、6 つの正当な成績が入力された場合は、既存の成績の合計を計算します。

Break文を使用した実装コードは以下のとおりです。

 public static void main(String[] args) {
    int score; 
    int sum = 0;
    boolean con = true;
    Scanner input = new Scanner(System.in);
    System.out.println("学生の名前を入力してください:");
    String name = input.next(); // ユーザーが入力した名前を取得する
    for (int i = 1; i <= 6; i++) {
        System.out.println(i + "番目の科目の成績を入力してください:");
        score = input.nextInt();// ユーザーが入力した成績を取得する
        if (score < 0) { // 入力された成績が負数かどうか判断し、負数の場合、ループを停止する
            con = false;
            break;
        }
        sum = sum + score; // 加算して合計を求める
    }
    if (con) {
        System.out.println(name + "の総合成績は" + sum + "です。");
    } else {
        System.out.println("申し訳ありませんが、成績が誤って入力されました。もう一度入力してください!");
    }
} 

プログラムを実行すると、ユーザーが入力したスコアが 0 未満の場合、「申し訳ありませんが、成績が誤って入力されました。もう一度入力してください!」というメッセージが出力され、それ以外の場合は、生徒の合計スコアが出力されます。

このプログラムでは、3科目目の成績を入力する際に​​、入力した成績が負の数で、判定条件「score<0」が真であるため、「con=false」を実行し、入力が間違っているかどうかをconでマークします。次に、break ステートメントを実行します。実行後、プログラムは条件ステートメントの後のステートメントの実行を続行せず、直接 for ループを終了します。次に、次の条件判定文を実行してブール変数の con が true かどうかを判定し、true の場合は合計スコアを出力し、そうでない場合は「申し訳ありません、スコアが間違って入力されました。再入力してください!」を出力します。

goto(ラベル付きブレーク)の機能を実現するにはbreak文を使用します。

深くネストされたループ ステートメントでは、予期しないことが発生することがあります。この時点で、ネストされたループ ステートメントから抜け出す方が望ましい場合があります。追加の条件判断を追加してループの各層の検出を実現するのは不便です。

幸いなことに、Java では、 C++とは異なり、複数の入れ子になったループ ステートメントから抜け出すためのラベル付きの Break ステートメントが提供されています。

Break ステートメントは goto の機能を実現でき、Java では、深くネストされたループを終了する問題に対処するために、break ステートメントの拡張形式が定義されています。

拡張 Break ステートメントを使用すると、ループや switch ステートメントの一部である必要がなく、1 つまたは複数の任意のコード ブロックで実行を終了できます。同時に、この拡張された Break ステートメントにはラベルがあり、実行を再開する場所を明確に指定できます。

深いループの入れ子を終了するための goto の役割に加えて、break はいくつかのプログラム構造上の特徴も保持します。

ラベル付き Break ステートメントの一般的な形式は次のとおりです。

label はコードブロックを識別するラベルです。この形式の Break ステートメントが実行されると、指定されたコード ブロックから制御が渡されます。ラベル付きコード ブロックは、break ステートメントを囲む必要がありますが、break のブロックを直接囲む必要はありません。つまり、ラベル付き Break ステートメントを使用して、一連のネストされたブロックを終了することはできますが、break ステートメントを使用して、break ステートメントを含まないコード ブロックに制御を渡すことはできません。

コード ブロックはラベルを使用して指定できます。ラベルには、コロンが後に続く任意の有効な Java 識別子を指定できます。ラベル付きコード ブロックは、break ステートメントの対象となり、ラベル付きブロックの最後からプログラムの実行を継続することができます。

以下は、ラベル付きの Break ステートメントの使用例です。

public class GotoDemo {
     public static void main(String[] args) {
         label: for (int i = 0; i < 10; i++) {
             for (int j = 0; j < 8; j++) {
                 System.out.println(j);
                 if (j % 2 != 0) {
                     break label;
                 }
             }
         }
     }
 } 

上記のプログラムの実行結果は次のようになります。

0
1 

ここでのラベルはラベルの名前であり、Java 言語の任意の法的識別子にすることができます。 label ステートメントはループと組み合わせて使用​​する必要があり、使用する場合は対応するループ ステートメントの上に記述し、label ステートメントはコロンで終わります。ラベル ステートメントに対応するループを中断する必要がある場合は、break の後にラベル名を指定します。

例えば、上記コードでは、jが1の場合、条件式「j%2!=0」が成立し、labelタグで表される最外側のループが終了します。

注: 通常、ブレーク直後のラベルは、意味を持たせるために、ブレークが配置されているループの外側のループの前に定義する必要があります。

switch ステートメント内の一連のステートメントを終了します。

switch ステートメント内の一連のステートメントを終了するには、各 case 節ブロックの最後にステートメント “break;” を追加します。この機能については、「 Java switch case 」で説明したため、ここでは説明しません。

 

「 Java Break ステートメント: ループから抜け出す」についてわかりやすく解説!絶対に観るべきベスト2動画

Break Java チュートリアル