for文のネスト

if文でもネストがあったようにfor文の中にさらにfor文を記述することで
さらに複雑なループ処理をすることができます。
このようなことをfor文のネストと言います

実際どのような処理をするのかサンプルプログラムを見て確認したいと思います。

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

class  Sample37{
    public static void main(String args[]){
     for(int i = 0; i < 3; i ++){
        for(int j = 0; j < 5; j++){
      System.out.println("i の値は" + i +" j の値は" + j);
            }
        }
} }

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

Sponsored link

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

実行結果はこのようになります。

でも、実行結果だけではわかりにくいと思います。
以下の表でプログラムの流れを確認したいと思います。

外側のfor文
内側のfor文
i = 0
j = 0
j = 1
j = 2
j = 3
j = 4
i = 1
j = 0
j = 1
j = 2
j = 3
j = 4
i = 2
j = 0
j = 1
j = 2
j = 3
j = 4
要するにi の値が0,1,2の各回についてj のループ処理が行われます。
i = 0 のとき j の値は 0 1 2 3 4 次に i = 1 になったとき j の値は 0 1 2 3 4
i = 2 になったとき j の値は 0 1 2 3 4 になるわけです。

サンプルプログラム(Sample37_1.java)break文を使用場合

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

   for(int i = 0; i < 3; i ++){
        for(int j = 0; j < 5; j++){
   if(j == 3){
         break;

    }

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

}

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

Sponsored link

【簡単更新&こだわりデザイン!】 100% ホームページ プチ
100GB無制限レンタルサーバー【X2】


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

このようになります。
表でまとめたいと思います。
i の値
j の値
if文の評価
出力結果
i = 0
j = 0
0 == 3(false)
i の値は0 j の値は0
i = 0
j = 1
1 == 3(false)
i の値は0 j の値は1
i = 0
j = 2
2 == 3(false)
i の値は0 j の値は2
i = 0
j = 3
3 == 3(true)
jのループが終了
i = 1
j = 0
0 == 3(false)
i の値は1 j の値は0
i = 1
j = 1
1 == 3(false)
i の値は1 j の値は1
i = 1
j = 2
2 == 3(false)
i の値は1 j の値は2
i = 1
j = 3
3 == 3(true)
jのループが終了
i = 2
j = 0
0 == 3(false)
i の値は2 j の値は0
i = 2
j = 1
1 == 3(false)
i の値は2 j の値は1
i = 2
j = 2
2 == 3(false)
i の値は2 j の値は2
i = 2
j = 3
3 == 3(true)
jのループが終了
break文はbreakが記述されているブロックの中だけで有効です。
したがって内側のfor文の中でif( j == 3)の時点で内側のfor文が処理を終了して
次の実行に移動します。

サンプルプログラム(Sample37_2.java)continue文を使用場合

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

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

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

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

    }

}

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

Sponsored link


実行結果はこのようになります。
iの値それぞれ0,1,2においてjの値のところでif文により0と2と4のところでcontinueになり
後続の処理は実行されないで条件式に戻っています。
また、表にまとめましたのでそれで確認してください。
iの値
jの値
if文の評価
出力結果
i = 0
j = 0
(0 % 2) = 0(true)continue
処理されない
i = 0
j = 1
(1 % 2) = 0(false)
i の値は0 j の値は1
i = 0
j = 2
(2 % 2) = 0(true)continue
処理されない
i = 0
j = 3
(3 % 2) = 0(false)
i の値は0 j の値は3
i = 0
j = 4
(4 % 2) = 0(true)continue
処理されない
i = 1
j = 0
(0 % 2) = 0(true)continue
処理されない
i = 1
j = 1
(1 % 2) = 0(false)
i の値は1 j の値は1
i = 1
j = 2
(2 % 2) = 0(true)continue
処理されない
i = 1
j = 3
(3 % 2) = 0(false)
i の値は1 j の値は3
i = 1
j = 4
(4 % 2) = 0(true)continue
処理されない
i = 2
j = 0
(0 % 2) = 0(true)continue
処理されない
i = 2
j = 1
(1 % 2) = 0(false)
i の値は2 j の値は1
i = 2
j = 2
(2 % 2) = 0(true)continue
処理されない
i = 2
j = 3
(3 % 2) = 0(false)
i の値は2 j の値は3
i = 2
j = 4
(0 % 2) = 0(true)continue
処理されない
これで、少しは理解できたと思います。
if文が赤のところは評価がtrueになりcontinue文によりその後の処理をされないことを理解してください

ここで紹介したbreak文やcontinue文はあくまでも、break; continue;を記述したブロック内
だけで有効でした。でも、ほかのブロックに一気に飛ぶことも可能です。
このやり方は次で説明します。

ページのトップへ戻る