複数の条件式を組み合わせる(if..else if)

広告

ここまでは一つの条件式を使って条件分岐を行ってきましたが、今度は複数の条件式を使いより複雑な条件文を行ってみます。書式は次の通りです。

if (条件式1){
  条件式1がtrueの時に実行する文1;
  条件式1がtrueの時に実行する文2;
  ...
}else if (条件式2) {
  条件式1がfalseで条件式2がtrueの時に実行する文1;
  条件式1がfalseで条件式2がtrueの時に実行する文2;
  ...
}else if (条件式3) {
  ...
  ...
}else{
  全ての条件式が共にfalseの時に実行する文1;
  全ての条件式が共にfalseの時に実行する文2;
  ...
}

複数の条件式が使われている場合は上の条件式から順に評価していきます。まず条件式1を評価しtrueだった場合は直後のブロック内の処理を実行してif文を終了します。条件式1の評価がfalseだった場合だけ次の条件式2を評価します。条件式2がtrueだった場合には直後のブロック内の処理を実行してif文を終了します。このように順に条件式を評価し、全ての条件式がfalseだった場合にelseの後のブロック内の文を実行します。

なお全ての条件式がfalseだった時に実行されるelse句については必要無ければ省略できます。

if (条件式1){
  条件式1がtrueの時に実行する文1;
  条件式1がtrueの時に実行する文2;
  ...
}else if (条件式2) {
  条件式1がfalseで条件式2がtrueの時に実行する文1;
  条件式1がfalseで条件式2がtrueの時に実行する文2;
  ...
}

注意して頂きたいことはいずれかの条件式でtrueとなった場合、その直後のブロック内の処理だけをしてif文は終了するということです。後の条件式でtrueとなるような場合であっても一度条件式がtrueと評価されるとそれ以降の条件式は評価されませんので注意して下さい。

実際には次のように記述します。

int num = 90;

if (num > 80){
  System.out.println("合格です");
}else if (num > 70){
  System.out.println("追試です");
}else{
  System.out.println("不合格です");
}

上位の例では変数「num」の値が80より大きかった場合には「合格です」と画面に表示します。そして変数「num」の値が80以下だった場合で70よりも大きかった場合には「追試です」と画面に表示します。変数「num」の値が70以下だった場合には「不合格です」と画面に表示します。

サンプル

では簡単な例で試しておきます。

JSample3_1.java

class JSample3_1{
  public static void main(String args[]){
    int suugaku, eigo;

    suugaku = 90;
    eigo = 75;

    System.out.println("数学:" + suugaku + "、英語:" + eigo);
    if (suugaku > 80 && eigo > 80){
      System.out.println("合格です");
    }else if (suugaku > 80 || eigo > 80){
      System.out.println("補習を受けて下さい");
    }else{
      System.out.println("不合格です");
    }

    suugaku = 82;
    eigo = 91;

    System.out.println("数学:" + suugaku + "、英語:" + eigo);
    if (suugaku > 80 && eigo > 80){
      System.out.println("合格です");
    }else if (suugaku > 80 || eigo > 80){
      System.out.println("補習を受けて下さい");
    }else{
      System.out.println("不合格です");
    }
  }
}

コンパイル後に実行すると次のように表示されます。

p3-1

( Written by Tatsuo Ikura )