ネストした 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 行目の処理が実行されます。
   8: int a = 5;
   12: if(a >= 0){
   13:  System.out.println("変数 a は 0 以上。");
   14:  if(a <= 10){
   15:   System.out.println("変数 a は 10 以下。");
   16:  }else{
   17:   System.out.println("変数 a は 10 より大きい。");
   18:  }
   19: }

 この場合のフローチャートは図 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 行目のメッセージが出力されます。
   8: int a = 15;
   12: if(a >= 0){
   13:  System.out.println("a は 0 以上。");
   14:  if(a <= 10){
   15:     System.out.println("a は 10 以下。");
   16:   }else{
   17:     System.out.println("a は 10 より大きい。");
   18:  }
   19: }

 この場合のフローチャートは図 6.6.4 のようになります。※10、21 行目は省略

図 6.6.4 : NestedIfStatement2 のフローチャート



NEXT>> 6.7 switch 文