Java break文の詳細

5711 ワード

Javaでは、break文には3つの役割があります.それぞれ、switch文で文のシーケンスを終了し、break文を使用してループを直接強制的に終了し、break文を使用してgotoを実現する機能です.
switch文で文シーケンスを終了
switch文で文シーケンスを終了すると、caseサブブロックごとに最後に文「break;」を追加します.
break文を使用してループを直接強制的に終了
break文を使用してループを強制的に終了し、ループ内の他の文やループの条件判断を無視することができます.ループでbreak文に遭遇すると、ループは終了し、ループの後の文が再開されます.
例1
明ちゃんは1000メートルの長距離競走に参加して、100メートルの滑走路の上で、彼は循環して走って、1周するたびに、残りの道のりは100メートルを減らして、走る輪の数は循環の回数です.しかし、1周が終わるたびに、監督は彼に堅持するかどうかを尋ね、yと答えたら走り続け、そうでなければ放棄した.break文を使用してループを直接強制的に終了する例は、次のとおりです.
 
  • import java.util.Scanner;
  • public class Test24
  • {
  • public static void main(String[] args)
  • {
  • Scanner input=new Scanner(System.in);//定義変数格納小明の回答
  • String answer=";//1周100メートル、1000メートル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(「がんばれ!続けろ!」);
  • }
  • }
  • }

  • このプログラムの実行後の効果は以下の通りです.
        1 
         ?
    y
      !  !
        2 
         ?
    y
      !  !
        3 
         ?
    n
      

    forループは0から10まで実行されるように設計されているが、明ちゃんの答えがyでない場合、break文はプログラムのループを終了し、ループ体外のコードを実行し続け、「がんばれ!がんばれ!」と出力する.break文は、人々が意図的に設定した無限ループを含む任意のJavaループに使用できます.一連のネストされたループでbreak文を使用すると、最も内側のループのみが終了します.例:
     
  • public class BreakDemo1
  • {
  • public static void main(String[] args)
  • {
  • //外循環、5回
  • for (int i=0;i<5;i++)
  • {
  • System.out.print("第"+(i+1)+"二次ループ:");
  •  
  • //内循環、10回の
  • 循環に設計
  • for(int j=0;j<10;j++)
  • {
  • //jが3に等しいか否かを判断し、もしそうであればサイクル
  • を終了する.
  • if(j==3)
  • {
  • break;
  • }
  • System.out.print("内循環の第"+(j+1)+"次循環t");
  • }
  • System.out.println();
  • }
  • }
  • }

  • プログラムの実行結果は次のとおりです.
     1   :     1         2         3   
     2   :     1         2         3   
     3   :     1         2         3   
     4   :     1         2         3   
     5   :     1         2         3   

    プログラムの実行結果から,内部ループにおけるbreak文は,存在する内部ループのみを終了し,外部ループは何の影響も受けない.注意:1つのループに1つ以上のbreak文を持つことができますが、break文が多すぎるとコード構造が破壊されます.switchループ文のbreakはswitch文にのみ影響し、ループには影響しません.
    例2
    Javaプログラムを作成し、ユーザーが6つのカリキュラムの成績を入力することを許可し、入力した成績が負であればループから飛び出します.6つの合法的な成績を入力すると、既存の成績の和が計算されます.break文を使用する実装コードは、次のとおりです.
     
  • public class Test25
  • {
  • 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未満の場合、「申し訳ありませんが、点数入力エラーです.再入力してください!」という情報を出力します.そうしないと、学生の総成績が印刷されます.出力結果は以下の通りです.
            :
    zhangpu
        1      :
    100
        2      :
    75
        3      :
    -8
      ,      ,     !
            :
    zhangpu
        1      :
    100
        2      :
    68
        3      :
    73
        4      :
    47
        5      :
    99
        6      :
    84
    zhangpu     :471

    このプログラムでは,3科目目の成績を入力すると,入力した成績が負であり,「score<0」がtrueであると判断し,「con=false」を実行し,入力に誤りがないかconで表記する.次にbreak文を実行し,実行後プログラムは条件文の後の文を実行し続けるのではなく,forループを直接終了する.その後、boolean変数のconがtrueであるか否かを判断し、trueであれば総成績を印刷する条件判断文を実行する.「申し訳ございませんが、スコア入力エラーです.再入力してください!」と印刷されます.
    break文を使用してgotoの機能を実現
    break文はgotoの機能を実現することができ,Javaはbreak文の拡張形式を定義してネストされた深いループを終了するという問題を処理した.拡張break文を使用すると、ループまたはswitch文の一部でなくてもよい1つまたは複数の任意のコードブロックの実行を終了できます.同時に、この拡張break文にはラベルが付いており、実行を再開する場所を明確に指定できます.breakはgotoが深層サイクルネストを終了する役割に加えて,いくつかのプログラム構造化の特性を保持している.ラベルbreak文の一般的なフォーマットは次のとおりです.
    break label;

    Labelはコードブロックを識別するラベルです.このような形式のbreak文を実行すると、制御権は指定されたコードブロックに渡される.ラベルが付けられたコードブロックはbreak文を囲む必要がありますが、breakのブロックを直接囲む必要はありません.すなわち、ラベル付きbreak文を使用して一連のネストを終了することができますが、break文を使用してbreak文を含まないコードブロックに制御権を渡すことはできません.ラベル(label)を使用してコードブロックを指定し、ラベルは任意の合法的で有効な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

    ここのlabelはラベルの名前で、Java言語の任意の合法的な識別子とすることができます.ラベル文はループと一致して使用する必要があります.使用時に対応するループ文の上に書き、ラベル文はコロンで終わります.ラベル文に対応するループを中断する必要がある場合は、breakの後にラベルに署名する方法を採用します.上記のコードでjが1の場合、「j%2!=0」条件式が成立すると、labelラベルが表す最外層サイクルが終了する.