今日は演算子と制御構造についての問題にチャレンジしましょう。
問題
次のプログラムを実行した場合、出力される結果はどれでしょうか?正しい選択肢を選んでください。
public class Main {
public static void main(String[] args) {
int score = 85;
char grade;
if (score >= 90) {
grade = 'A';
} else if (score >= 80) {
grade = 'B';
} else if (score >= 70) {
grade = 'C';
} else {
grade = 'F';
}
System.out.println("Your grade is: " + grade);
}
}
選択肢
- A. Your grade is: A
- B. Your grade is: B
- C. Your grade is: C
- D. Your grade is: F
答えと解説
回答を見る
答え
B. Your grade is: B
解説
基本説明:
このプログラムは条件分岐を使って、数値から文字に変換して成績を出力します。
scoreという変数は得点を表し、int型の整数として85が代入されています。
この得点に基づき、if文で条件をチェックし、gradeを設定します。
scoreの値が90以上ならばgrade=’A’、80以上ならばgrade=’B’、70以上ならばgrade=’C’、それ以外はgrade=’F’と設定されます。
具体的には、scoreが85ですので「80以上90未満」の条件に一致し、gradeは’B’となり、結果として「Your grade is: B」が出力されます。
誤答理由:
選択肢Aが誤答となるのは、85は90以上ではないため、gradeが’A’になることはありません。
選択肢CやDは、scoreが85であるため、80以上の条件でBが選ばれた時点で他の条件はチェックされません。
このため、grade=’C’や’F’にはなりません。
つまずきポイント:
初学者がつまずきやすいのは、条件分岐の評価順です。
if-else if構造では、条件に一致した時点でそのブロックを実行し、他のelif、elseは素通りです。
もし間違っていても追加条件で修正されないため、一番初めの条件が正しい値になるかが重要です。
発展知識:
このような分岐は頻繁に使用され、switch文で代替できることもあります。
switch文は一つの変数に対して複数のケースを用意し、一致するケースを実行するものです。
また、if文を使わずに同様の条件をeval()で数式評価する方法もありますが、パフォーマンスが低いため非推奨です。