if – else if – else 文

6.4 if – else if – else 文

 前項では「もし○○○ならば、×××する。そうでなければ△△△する」という条件分岐を解説しましたが、「そうでなければ△△△する」の部分にさらに条件が追加され、「もし○○○ならば×××する。そうでなくもし□□□ならば◇◇◇する。どちらでもなければ△△△する」というような、さらに複数の条件がある場合は、if – else if – else 文を使います。

6.4.1 if else-if -else 文の基本構文

 if-else if(エルスイフ)-else 文の基本構文は下記のようになります。


書式:if-else if-else 基本構文



 if – else if – else 文の処理の流れは以下のようになります。
 もし条件式 A が合っていたら、処理①を行う。
      ↓
 条件式 A が合っていないが条件式 B が合っている場合は処理②を行う。
      ↓
 条件式 A も条件式 B も合っていない場合は処理③を行う。
 図 6.4.1 は、if-else if-else 文をフローチャートにしたものです。

図 6.4.1 : f-else if-else 基本構文の処理フロー


ポイント

・ 3つ以上の条件に応じた処理を行う場合 if-else if-else 文を使います。

 次の節で if-else if-else 文を使ったサンプルプログラムを作ってみることにしましょう。

6.4.2 複数条件式の if ブロックが実行されるプログラム

 複数条件式の 1 番目が成立し、if ブロック内のメッセージが出力されることを確認する。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch6
③ 名前 :IfElseIfStatement1
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfElseIfStatement1.java

package jp.co.f1.intro.ch6;

public class IfElseIfStatement1 {

	public static void main(String[] args) {

		 //比較用の値を管理するための変数 
     int a = 1; 

     System.out.println("*****if 文の判定開始*****"); 
	
     if(a==1){ 
        System.out.println("変数 a と 1 は等しい。"); 
     }else if(a == 2){ 
        System.out.println("変数 a と 2 は等しい。"); 
	   }else{ 
        System.out.println("変数 a は 1 とも 2 とも等しくない。"); 
     }
	
     System.out.println("*****if 文の判定終了*****"); 
  }
	
}

実行結果

解説

  8 行目で、if – else if -else 文で利用する int 型の変数 a を宣言し、値 1 で初期化しています。
   8: int a = 1;

 12~18 行目が if – else if -else 文です。
 12 行目の if 文の条件式では、「a == 1」の判定を行います。変数 a の値は 1 なので、「1 == 1」となり条件が満たされるので、13 行目が実行されます。
 14 行目は else if 文なので、直前の if 文または else if 文の条件が満たされなかった場合のみ条件式の判定を行います。今回は直前の if 文の条件が満たされているので、条件式の判定は行いません。
 16 行目は else 文です。else ブロック内は、直前の if 文や else if 文全ての条件が満たされなかった場合のみ実行されます。今回は、12 行目の if 分の条件が満たされているので実行されません。
   12: if(a == 1){
   13:  System.out.println("変数 a と 1 は等しい。");
   14: }else if(a == 2){
   15:  System.out.println("変数 a と 2 は等しい。");
   16: }else{
   17:  System.out.println("変数 a は 1 とも 2 とも等しくない。");
   18: }

 この場合のフローチャートは図 6.4.2 のようになります。

図 6.4.2 : IfElseIfStatement1 のフローチャート


6.4.3 複数条件式の else if ブロックが実行されるプログラム

 複数条件式の 2 番目が成立し、else if ブロック内のメッセージが出力されることを確認します。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch6
③ 名前 :IfElseIfStatement2
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfElseIfStatement2.java

package jp.co.f1.intro.ch6;

public class IfElseIfStatement2 {

	public static void main(String[] args) {

		 //比較用の値を管理するための変数 
     int a = 2; 

     System.out.println("*****if 文の判定開始*****"); 
	
     if(a==1){ 
        System.out.println("変数 a と 1 は等しい。"); 
     }else if(a == 2){ 
        System.out.println("変数 a と 2 は等しい。"); 
	   }else{ 
        System.out.println("変数 a は 1 とも 2 とも等しくない。"); 
     }
	
     System.out.println("*****if 文の判定終了*****"); 
  }
	
}

実行結果

解説

  8 行目で int 型の変数 a を宣言し、値 2 で初期化します。
   8: int a = 2;

 12~18 行目が if – else if -else 文です。
 12 行目では、if 文の条件式「a == 1」を判定します。変数 a の値は 2 なので、「2 == 1」となり、この条件式は成立しません。よって、if ブロック内の 13 行目は実行されず、if 文を抜けます。
 14 行目では else if 文の条件式「a == 2」を判定します。これは「2 == 2」になり、条件は満たされます。そのため、else if ブロック内の 15 行目が実行されます。
 16 行目は else 文ですが、直前の if 文または else if 文である 14 行目の else if 文の条件が満たされているので、else 文は実行されません。
 この場合のフローチャートは図 6.4.3 のようになります。
   12: if(a==1){
   13:  System.out.println("変数 a と 1 は等しい。");
   14: }else if(a==2){
   15:   System.out.println("変数 a と 2 は等しい。");
   16: }else{
   17:  System.out.println("変数 a は 1 とも 2 とも等しくない。");
   18: }

図 6.4.3 : IfElseIfStatement2 のフローチャート


6.4.4 複数条件式の else ブロックが実行されるプログラム

 複数条件式のどれにも当てはまらずに、else ブロック内のメッセージが出力されることを確認します。

① ソース・フォルダー :myproj_intro/src
② パッケージ :jp.co.f1.intro.ch6
③ 名前 :IfElseIfStatement3
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ IfElseIfStatement3.java

package jp.co.f1.intro.ch6;

public class IfElseIfStatement3 {

	public static void main(String[] args) {

		 //比較用の値を管理するための変数 
     int a = 3; 

     System.out.println("*****if 文の判定開始*****"); 
	
     if(a==1){ 
        System.out.println("変数 a と 1 は等しい。"); 
     }else if(a == 2){ 
        System.out.println("変数 a と 2 は等しい。"); 
	   }else{ 
        System.out.println("変数 a は 1 とも 2 とも等しくない。"); 
     }
	
     System.out.println("*****if 文の判定終了*****"); 
  }
	
}

実行結果

解説

  8 行目で int 型の変数 a を値 3 で初期化しています。
   8: int a = 3;

 12~18 行目は if – else if – else 文です。
 12 行目は if 文の条件式「a == 1」です。変数 a の値は 3 なので、「3 == 1」となり、条件は満たされません。if文を抜け、else if 文に進みます。
 14 行目は else if 文の条件式「a == 2」です。「3 == 2」となり、条件式は満たされないので、else if 文を抜け、else 文へ進みます。
 16~18 行目は else 文です。この複数条件式は if – else if -else 文なので、if 文と else if 文どちらも満たさないので else 文の処理である 17 行目が実行されます。今回は、10 行目で int 型の変数 a に 3 を代入していますので、12 行目の条件とも、14 行目の条件とも合致しません。従って 16 行目の else 文の中の処理が実行され、17 行目の処理で「a は 1 とも 2 とも等しくない」というメッセージを出力します。
   12: if(a==1){
   13:  System.out.println("変数 a と 1 は等しい。");
   14: }else if(a==2){
   15:   System.out.println("変数 a と 2 は等しい。");
   16: }else{
   17:  System.out.println("変数 a は 1 とも 2 とも等しくない。");
   18: }

 この場合のフローチャートは図 6.4.4 のようになります。

図 6.4.4 : IfElseIfStatement3 のフローチャート


if 文、else if 文、else 文のバリエーション

・ 複数条件式、必ず if文で始まる。
・ if 文の後ろに、else if 文をいくつでも繋げることができる。
・ 最後の else 文、必要なければ記述しなくてもよい。
 この条件に当てはまっていれば、条件式はいくつでも増やすことが可能です。

例 : if 文のみの記述 (これはすべての if 条件を処理させたい場合に使います)

図 6.4.5 : if 文のみの記述


例 : if 文と複数条件式(if – else if ・・・ else)を両方使った記述

図 6.4.6 : if 文と複数条件式(if – else if ・・・ else)を両方使った記述のフローチャート



NEXT>> 6.5 論理演算子による複数条件の設定