result = <式> ? <文1> : <文3>;
ここで、expression はブール式です。式が真の場合はステートメント 1 を実行し、それ以外の場合はステートメント 3 を実行します。この三項演算子は結果を返すことを期待しているため、単純な 2 分岐プログラムを実装するには、この条件演算子を使用できます。
以下は条件演算子を使用した例です。
int x、y、z;
x = 6、y = 2;
z = x>y ? x-y : x+y;
ここでzの値を計算するには、まずx>yで表される値を判定し、真であればzの値はxy、そうでなければzの値はx+yとなります。明らかに、x>y 式は true と評価されるため、z の値は 4 になります。
ヒント: 条件演算子は、if-else ステートメントの簡略化された形式として理解できます。比較的単純な式を使用する場合、この演算子を使用すると、プログラム コードが簡略化され、プログラムが読みやすくなります。
条件演算子を使用する場合は、次の式などの優先順位の問題にも注意する必要があります。
x>y ? x-=y : x+=y;
条件演算子は代入演算子よりも優先されるため、コンパイル時に構文エラーが発生します。上記のステートメントは実際には次のステートメントと同等です。
(x>y ? x-=y : x)+=y;
また、演算子「+=」は代入演算子であり、左側のオペランドが変数である必要があるため、エラーが発生します。このようなエラーを避けるために、括弧「0」を使用して区別することができます。たとえば、次のような表現が正しいです。
(x>y) ? (x-=y): (x+=y);
例1
プログラム内で 3 つの変数 x、y、z を宣言し、ユーザーはキーボードから x の値を入力し、条件演算子を使用して変数 y と z に値を代入します。実装コードは次のとおりです。
public class Test9 {
public static void main(String[] args) {
int x, y, z; // 3つの変数を宣言する
System.out.print("数値を入力してください:");
Scanner input = new Scanner(System.in);
x = input.nextInt(); // ユーザーがxの値を入力する
// xが5より大きいかどうかを判断し、それに応じてyに値を代入する
y = x > 5 ? x : -x;
// yがxよりも大きいかどうかを判断し、それに応じてzに値を代入する
z = y > x ? y : 5;
System.out.printf("x=%d \n", x);
System.out.printf("y=%d \n", y);
System.out.printf("z=%d \n", z);
}
}
このプログラムでは、まず x の値が 58 であると入力し、次に x の値が 5 より大きいかどうかを判断し、明らかに条件が true であれば、y の値は x、つまり y=58 となります。次に、y の値が x より大きいかどうかを判断します。y の値と x の値が両方とも 58 であるため、条件が成立しないため、z=5 になります。 xの値を4として再度入力し、xの値が5より大きいかどうかを判断し、そうでない場合はy=-4とし、そうでない場合はyの値がxより大きいかどうかを判断します。 true の場合、z=5。