ネストした if 文
6.6 ネストした if 文
プログラミングにおいてネストとは、処理の中にさらに制御文を含める「入れ子」構造のことを言います。if文のネストについて、基本となる構文から解説していきます。
6.6.1 ネストした if 文の基本構文
ネストした if 文の基本構文は、下記のように if 文の中に if 文が記述された形になります。
書式:ネストした if 基本構文 1
今回の場合、まず条件式 A が評価され、もし条件が成立した場合、今度は条件式 B が評価されます。条件式 Bの条件も成立した場合処理を行う、ということになります。
上記のネストした if 文の処理の流れをフローチャートにすると、図 6.6.1 のようになります。
図 6.6.1 : ネストした if 基本構文 1
条件式 2 つどちらも当てはまった時に処理が実行されるということは、つまり「条件式 A && 条件式 B」と書き換えることができます。
書式:ネストした if 基本構文 2
今回の場合、まず条件式 A が評価され、もし条件が成立した場合、まず処理①が実行されます。次に条件式 Bが評価され、条件が成立した場合処理②を行う、ということになります。
上記のネストした if 文の処理の流れをフローチャートにすると、図 6.6.2 のようになります。
図 6.6.2 : ネストした基本構文 2 のフローチャート
条件式 A のみ当てはまった場合は処理①のみ実行され、条件式 A と条件式 B のどちらも成立する時、処理①に加え処理②が実行されます。
6.6.2 ネストした if 文内の条件が全て成立するプログラム
ネストした if 文内の条件式が成立して、if ブロック内のメッセージが出力されることを確認します。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch6
③ 名前 :NestedIfStatement1
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ NestedIfStatement1.java
package jp.co.f1.intro.ch6; public class NestedIfStatement1 { public static void main(String[] args) { //比較用の数値を管理するための変数 a を宣言し、5 で初期化 int a = 5; System.out.println("*****if 文の判定開始*****"); if(a >= 0){ System.out.println("変数 a は 0 以上。"); if(a <= 10){ System.out.println("変数 a は 10 以下。"); }else{ System.out.println("変数 a は 10 より大きい。"); } } System.out.println("*****if 文の判定終了*****"); } }
実行結果
解説
このサンプルプログラムでは、10 行目で int 型の変数 a に 5 を代入しています。
その後の 12 行目の if 文で「変数 a が 0 以上。」という条件が成立した場合、13 行目で「変数 a は 0 以上。」というメッセージを出力します。次に 14 行目の if 文が評価され、「変数 a が 10 以下。」なら 15 行目のメッセージが出力され、成立しなければ 17 行目のメッセージが出力されます。今回変数 a には 5 が代入され、条件式「a>=0」も「a<=10」も成立するので、15 行目の処理が実行されます。
この場合のフローチャートは図 6.6.3 のようになります。※10、21 行目は省略
図 6.6.3 : NestedIfStatement1 のフローチャート
6.6.3 ネストした if 文内の条件が成立しないプログラム
ネストした if 文内の条件式が成立せずに、else ブロック内のメッセージが出力されることを確認します。
① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch6
③ 名前 :NestedIfStatement2
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
➢ NestedIfStatement2.java
package jp.co.f1.intro.ch6; public class NestedIfStatement2 { public static void main(String[] args) { //比較用の数値を管理するための変数 int a = 15; System.out.println("*****if 文の判定開始*****"); if(a >= 0){ System.out.println("変数 a は 0 以上。"); if(a <= 10){ System.out.println("変数 a は 10 以下。"); }else{ System.out.println("変数 a は 10 より大きい。"); } } System.out.println("*****if 文の判定終了*****"); } }
実行結果
解説
今回は、10 行目で int 型の変数「a」に 15 を代入しています。
条件式「a>=0」は成立するので 13 行目のメッセージは出力されます。しかし「a<=10」は成立しないため else文に入り、17 行目のメッセージが出力されます。
この場合のフローチャートは図 6.6.4 のようになります。※10、21 行目は省略
図 6.6.4 : NestedIfStatement2 のフローチャート