条件演算子
条件に応じて値を決定する
if〜else文は最も汎用性の高い条件分岐の構文です。 しかしながら、わざわざif〜else文を使わなくてもよい場合もあります。
入力された2つの整数のうちの、大きい方を表示するプログラムを考えてみましょう。 まずは、if〜else文を使ったものです。
IfSample06.java
import java.io.*; class IfSample06 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("一つ目の整数を入力してください。"); int num1 = Integer.parseInt(br.readLine()); System.out.println("二つ目の整数を入力してください。"); int num2 = Integer.parseInt(br.readLine()); int max;//大きい方の整数が入る。 if(num1 > num2){ max = num1; }else{ max = num2; } System.out.println("大きいのは" + max + "の方です。"); } }
if〜else文の条件 num1 > num2 がtrueの場合は、maxにnum1を代入します。 そうでないときは、num2の方が大きいか、等しくなっていいますので、maxにnum2を代入します。 その結果、num1とnum2のどちらかが大きいときは大きい方が表示され、等しいときはnum2が表示されます。
IfSample06の実行結果 1
一つ目の整数を入力してください。 2 二つ目の整数を入力してください。 4 大きいのは4の方です。
IfSample06の実行結果 2
一つ目の整数を入力してください。 7 二つ目の整数を入力してください。 7 大きいのは7の方です。
IfSample06のif〜else文では、条件に応じて1つの変数maxの値を決めているだけです。 このような場合、条件演算子(conditional operator)の ?: を使って処理することもできます。 条件演算子を使った式は次のような構文になります。
構文 : 条件演算子
条件 ? 式1 : 式2
全体の式の値は、条件を評価した値がtrueの場合は式1を評価した値になり、falseの場合は、式2を評価した値になります。
条件演算子を使って、IfSample06を書き換えてみましょう。
OperatorSample11.java
import java.io.*; class OperatorSample11 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("一つ目の整数を入力してください。"); int num1 = Integer.parseInt(br.readLine()); System.out.println("二つ目の整数を入力してください。"); int num2 = Integer.parseInt(br.readLine()); int max = num1 > num2 ? num1 : num2; System.out.println("大きいのは" + max + "の方です。"); } }
このプログラムの実行結果は、IfSample06の実行結果と同じになりますが、ずいぶんすっきりと書けているのがお分かりでしょう。if〜else文で書かれていた部分が、
int max = num1 > num2 ? num1 : num2;
という1行に凝縮されてしまいました。 全体の式の値は、 num1 > num2 がtrueの場合は、 : の左のnum1になり、falseの場合は、 : の右のnum2になります。 こうして決まった全体の式の値が、maxに代入されるのです。
条件に応じて値を決定するだけなら、条件演算子 ?: を使って、簡潔に記述することができる。