ネストした 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
1 | package jp.co.f1.intro.ch6; |
3 | public class NestedIfStatement1 { |
5 | public static void main(String[] args) { |
7 | //比較用の数値を管理するための変数 a を宣言し、5 で初期化 |
10 | System.out.println("*****if 文の判定開始*****"); |
13 | System.out.println("変数 a は 0 以上。"); |
15 | System.out.println("変数 a は 10 以下。"); |
17 | System.out.println("変数 a は 10 より大きい。"); |
21 | 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
1 | package jp.co.f1.intro.ch6; |
3 | public class NestedIfStatement2 { |
5 | public static void main(String[] args) { |
10 | System.out.println("*****if 文の判定開始*****"); |
13 | System.out.println("変数 a は 0 以上。"); |
15 | System.out.println("変数 a は 10 以下。"); |
17 | System.out.println("変数 a は 10 より大きい。"); |
21 | 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 文