今回も問題を解いていきましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?適切な選択肢を選んでください。
public class Main {
public static void main(String[] args) {
int a = 2;
int b = 5;
int c = 8;
int result = ++a * b-- + c / --b;
System.out.println(result);
}
}
選択肢
- A. 21
- B. 20
- C. 22
- D. 19
答えと解説
回答を見る
答え
D. 19
解説
基本説明
このプログラムでは、演算子の順序と優先順位を理解する必要があります。
変数a
、b
、c
の初期値はそれぞれ2、5、8です。
式result = ++a * b-- + c / --b;
は、いくつかの演算子を含み、これらの優先順位と評価順を理解することが求められます。
誤答理由
多くの場合、計算の各ステップでの変数の値の変化を見落とします。
特に++
(インクリメント)と--
(デクリメント)のオペレーションがメソッド内でどのように作用するかを理解することが難しいかもしれません。
つまずきポイント
まず、++a
から解析を始めると、a
は事前にインクリメントされて3となります。
次のb--
は事後デクリメントで、b
は5として計算に使用され、その後4になります。
最終的にc / --b
はc
は8、b
は事前にデクリメントされ3となるため、結果は2です。
発展知識
演算子の優先順位と結合方向がJavaプログラムの中でどのように適用されるかを理解することは重要です。
高い優先順位を持つ演算子が先に評価され、通常これは左から右に評価されます。
複雑な演算には括弧を使用することで、予期しない動作を回避することができます。