
問題
次のコードをコンバイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
new Main().evaluate("A");
}
private void evaluate(String rank) {
switch (rank) {
case "A" -> System.out.println("Very Good");
case "B", "C" -> System.out.println("Good");
case "D", "E" -> System.out.println("Not Good");
default -> System.out.println("Unknown");
}
}
}
選択肢
A)コンパイルエラーになる
B)Very Good Good Not Good Unknown が出力される
C)Very Good が出力される
D)Very Good Unknown が出力される
E)Very Good Good Good Not Good Not Good Unknown が出力される
解答
A)コンパイルエラーになる
B)Very Good Good Not Good Unknown が出力される
C)Very Good が出力される
D)Very Good Unknown が出力される
E)Very Good Good Good Not Good Not Good Unknown が出力される
解説
「->」を使用するとbreakと同じ意味で、一致するcaseの処理のみ実行されます。
そのため、switchでAに該当するVery Goodのみが出力されます。
実行の流れ
- メインメソッド:
- プログラムが開始され、
mainメソッドが実行されます。 new Main().evaluate("A");によってMainクラスのインスタンスが生成され、そのevaluateメソッドが呼ばれます。引数には"A"が渡されます。
- プログラムが開始され、
- evaluateメソッド:
- 引数
rankに"A"が渡されます。 switch文が開始され、rankの値が"A"であるかどうかがチェックされます。
- 引数
- switch文の評価:
case "A" -> System.out.println("Very Good");によって"A"がマッチします。- この行が実行され、
System.out.println("Very Good");により “Very Good” が出力されます。
- 他のケースの無視:
"A"にマッチしたため、switch文の残りのケース("B","C","D","E", およびdefault)は実行されません。- そのため、”Very Good” の出力以外は発生しません。
まとめ
- 出力: 最終的に出力されるのは “Very Good” だけです。
- コンパイルエラー: このコードは正しく記述されているため、コンパイルエラーは発生しません。
- 選択肢の確認:
- A)コンパイルエラーになる → 不正解
- B)Very Good Good Not Good Unknown が出力される → 不正解
- C)Very Good が出力される → 正解
- D)Very Good Unknown が出力される → 不正解
- E)Very Good Good Good Not Good Not Good Unknown が出力される → 不正解
このように、選択肢 C が正しい理由は、switch 文で "A" にマッチしたため、その部分だけが実行され、他の出力は無視されるからです。
対象資格:Java SE17 認定資格
