HOME> Javaアプリケーション講座>制御文>ラベルによるループの制御

ラベルによるループの制御

今までは、同じブロック内でのbreak文、continue文での説明をしました。
しかしネストする複数のループを一気にbreak,continueするには
別の方法を用いなければいけません。
そのときに用いるのがラベルです。

ラベルとはそのループにつける名前のようなものです。
ラベルを使用することで、ネストになったループの繰り返しを一気に脱出することができます。
ラベルには任意の名前をつけることができます。
つけ方は、ラベル名:(コロン)を記述するだけです。
ループから脱出したいところにbreak ラベル名; または continue ラベル名;と記述します。

ラベルの記述の仕方


   ラベル名:
    for(         ){
        for(         ){

        break ラベル名;

     }

     }

このようになり break ラベル名;と記述するだけで ラベル名:のところまで
一気に飛ぶことができます。

サンプルプログラム(Sample38.java)

class Sample38{
    public static void main(String args[]){

   point:
    for(int i = 0; i < 4;i++){
     for(int j = 0; j < 4;j++){

       System.out.println("i の値は" + i + "j の値は" + j);

         if(i == 1 && j == 1){
      break point;
     }

          }

       }
   }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます

プログラムの処理の流れを表で確認したいと思います
i の値
jの値
if文の評価
出力結果
i = 0
j = 0
0 == 1 && 0 == 1(false)
i の値は0 j の値は0
i = 0
j = 1
0 == 1 && 1== 1(false)
i の値は0 j の値は1
i = 0
j = 2
0 == 1 && 2 == 1(false)
i の値は0 j の値は2
i = 0
j = 3
0 == 1 && 3 == 1(false)
i の値は0 j の値は3
i = 1
j = 0
1 == 1 && 0 == 1(false)
i の値は1 j の値は0
i = 1
j = 1
1 == 1 && 1 == 1(true)
i の値は1 j の値は1
ここで if文 i == 1 && j == 1は i とj が両方ともtrueなら全体がtrueになりました。

したがって i = 1, j = 1のときにtrueになりbreakにより終了します。
しかし、breakのあとにpointというラベルが指定されています。
したがって、point:に移動して終了します。
つまり、point:が外側のfor文の外にあるので、外側のfor文まで抜けます。

ついでに、上記Sample 38.javaでラベルを記述しなかった場合を確認します。

サンプルプログラム(Sample38_1.java)

class Sample38_1{
    public static void main(String args[]){

  for(int i = 0; i < 4;i++){
     for(int j = 0; j < 4;j++){

       System.out.println("i の値は" + i + "j の値は" + j);

         if(i == 1 && j == 1){
      break;
     }

          }

       }

    }

}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

あなたならジュゲムがイイ
中級者以上向けブログJUGEM PLUS
月99円〜、最大20GB、豊富な機能付きエクストリムレンタルサーバー


コンパイル・実行してみます。

これは、通常のbreak文の処理です。
つまりラベルの記述がないのでここで使われているbreak;は内側のfor文にだけ有効です。
内側のfor文にではif(i == 1 && j == 1)でbreak;になります。
つまり i =1 j = 1のときだけ 内側のfor文を抜け出します。
その後に外側のfor文に処理が移りi = 2 j = 0 になるわけです。

サンプルプログラム(Sample38_2.java)continue文によるラベルのループ制御

class Sample38_2{
    public static void main(String args[]){

point:
    for(int i = 0; i < 4;i++){
     for(int j = 0; j < 4;j++){

       System.out.println("i の値は" + i + "j の値は" + j);

        if((i % 2) == 0 && (j % 2) == 0){
      continue point;
     }
       }

       }
   }
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link


また、表にて確認したいと思います。
i の値
jの値
if文の評価
出力結果
i = 0
j = 0
(0%2) == 0 && (0%2) == 1(true)
i の値は0 j の値は0
i = 1
j = 1
(1%2) == 0 && (0%2) == 1(false)
i の値は1 j の値は1
i = 1
j = 2
(1%2) == 0 && (2%2) == 1(false)
i の値は1 j の値は2
i = 1
j = 3
(1%2) == 0 && (3%2) == 1(false)
i の値は1 j の値は3
i = 2
j = 0
(2%2) == 0 && (0%2) == 1(true)
i の値は2 j の値は0
i = 3
j = 0
(3%2) == 0 && (0%2) == 1(false)
i の値は3 j の値は0
i = 3
j = 1
(3%2) == 0 && (0%2) == 1(false)
i の値は3 j の値は1
i = 3
j = 2
(3%2) == 0 && (0%2) == 1(false)
i の値は3 j の値は2
i = 3
j = 3
(3%2) == 0 && (0%2) == 1(false)
i の値は3 j の値は3
このように、if文の評価がtrueになる場所でcontinueにより、ラベルpointまで移動します。
そしてまたfor文の処理を続けます 。

ページのトップへ戻る