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