ネストした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を代入しています。    8: int a = 7;

 12行目のif文で「変数aが0以上。」という条件が成立した場合、13行目で「変数aは0以上。」というメッセージを出力します。次に14行目のif文が評価され、「変数aが10以下。」なら15行目のメッセージが出力され、成立しなければ17行目のメッセージが出力されます。今回変数aには7が代入されていますので、条件式「a>=0」も「a<=10」も成立するため、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.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を代入しています。    8: int a = 33;

  条件式「a>=0」は成立するので13行目のメッセージは出力されます。しかし「a<=10」は成立しないためelse文に入り、17行目のメッセージが出力されます。    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.5.4に示します。(ここでは、10、21行目は省略します。)

図 6.5.4 NestedIfStatement2のフローチャート


NEXT>> 6.6 if文について