初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
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 のとき 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のループが終了 |
したがって内側の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;を記述したブロック内
だけで有効でした。でも、ほかのブロックに一気に飛ぶことも可能です。
このやり方は次で説明します。