初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けの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 |
したがって i = 1, j = 1のときにtrueになりbreakにより終了します。
しかし、breakのあとにpointというラベルが指定されています。
したがって、point:に移動して終了します。
つまり、point:が外側のfor文の外にあるので、外側のfor文まで抜けます。
サンプルプログラム(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 |
そしてまたfor文の処理を続けます 。