Javaの基礎文法 制御構文のネスト(3-7)

記事上広告

制御構文は同一もしくは異なる複数の構文を入れ子ネスト)することにより、複雑な流れのプログラムを作成することができます。

制御文のネスト例

制御構文のネストの形は決まっているわけではありませんが、代表的な例を紹介します。

条件分岐内の条件分岐

条件分岐の中に条件分岐を入れ子にします。

条件分岐の入れ子が多すぎるとプログラムの可読性が落ちる場合もあるので、多用は禁物です。

以下はifの中にifをネストした例です。

上記のifは以下のような論理演算子を利用することでも同じ処理になります。

if(month == 1 && date== 1)

多重ループ

ループ処理をネストすることにより、複雑な反復処理を行うことができます。

2重ループ(2つのループ処理をネスト)ぐらいだと流れは追いやすいですが、場合によっては3重よりも多いループを使うこともあります。

ネストされたループ中の処理回数は、足し算ではなく掛け算となります。5回ループするforを2つネストした場合は、10回の処理ではなく25回処理されることになります。

以下はforの中にforをネストした例です。

以下をクリックすると、上記プログラムの解説が表示されます。

プログラム解説
順序 動作 動作するfor 補足
1 int i = 0 外側 iを0で初期化
2 i < 2 外側 i(0) < 2の比較でtrue
内側ループ開始
3 int j = 0 内側 jを0で初期化
4 j < 3 内側 j(0) < 3の比較でtrue
5 Sysout(“■”) 内側 ■を表示
6 j++ 内側 jがインクリメントされ1になる
7 j < 3 内側 j(1) < 3の比較でtrue
8 Sysout(“■”) 内側  ■を表示
9 j++ 内側  jがインクリメントされ2になる
10 j < 3 内側 j(2) < 3の比較でtrue
11 Sysout(“■”) 内側 ■を表示
12 j++ 内側 jがインクリメントされ3になる
13 j < 3 内側 j(3) < 3の比較でfalse
内側ループ終了
14 Sysout() 外側 改行
15 i++ 外側 iがインクリメントされ1になる
16 i < 2 外側 i(1) < 2の比較でtrue
内側ループ開始
17 int j = 0 内側 jを0で初期化
18 j < 3 内側 j(0) < 3の比較でtrue
19 Sysout(“■”) 内側 ■を表示
20 j++ 内側 jがインクリメントされ1になる
21 j < 3 内側 j(1) < 3の比較でtrue
22 Sysout(“■”) 内側 ■を表示
23 j++ 内側 jがインクリメントされ2になる
24 j < 3 内側 j(2) < 3の比較でtrue
25 Sysout(“■”) 内側 ■を表示
26 j++ 内側 jがインクリメントされ3になる
27 j < 3 内側 j(3) < 3の比較でfalse
内側ループ終了
28 Sysout() 外側 改行
29 i++ 外側 iがインクリメントされ2になる
30 i < 2 外側 i(2) < 2の比較でfalse
上の表(長い)のような流れになっており、外側のループが1度実行される度にjは初期化され内側のループ(3回)が実行される形になります。
つまり、■の表示は外側2x内側3の計6回処理が行われる形になり、外側に改行の記述があるので、以下のような表示なります。

■ ■ ■
■ ■ ■

上の図解は2重ループの例です。以下のような外側と内側のループを繰り返す流れになっています。(番号は図解と連動してます。)

  1. 外側のループが始まり(①)
  2. 内側のループが行われ(②)
  3. また外側のループに戻る(③)

その他のネスト

ifの中にwhile(条件に合致した際にループを回す)や、forの中にif(ループ処理内部で条件に合致した場合に処理を行う)を入れる、といったように様々な形があります。

色々な構文の組み合わせがあるので、他の人が書いたプログラムもたくさん読んで参考にしましょう。

まとめ

  • 制御文の中に制御文を記述することを「制御文の入れ子」や「制御文のネスト」と表現する
  • 制御文のネストの形は様々
参加 ブログランキング

記事頑張って書いたかもねー?と思う方は下を押してもらえるといいかなーなんて
にほんブログ村 IT技術ブログへ
にほんブログ村


Javaランキング

目次へのアクセス
スポンサーリンク
レクタングル

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル