問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
int[] score = { 60, 90, 100, 95, 30, 80, 100, 65 };
for (int i : score) {
System.out.print(Test.evaluate(i));
}
}
}
class Test {
public static String evaluate(int value) {
return switch (value) {
case 10, 20 -> "D";
case 30, 40 -> "C";
case 50, 60, 70 -> "B";
case 80, 90 -> "A";
case 100 -> "S";
default -> "E";
};
}
}
選択肢
A)ClassCastException がスローされる
B)BASACASB が出力される
C)Main クラスでコンパイルエラーになる
D)BBASECCAASE が出力される
E)BASE が出力される
F)Test クラスでコンパイルエラーになる
G)BASECASE が出力される
H)BBASACCAASB が出力される
解答
A)ClassCastException がスローされる
B)BASACASB が出力される
C)Main クラスでコンパイルエラーになる
D)BBASECCAASE が出力される
E)BASE が出力される
F)Test クラスでコンパイルエラーになる
G)BASECASE が出力される
H)BBASACCAASB が出力される
解説
evaluate メソッドのスイッチ文
- スコア 60:
case 50, 60, 70
にマッチ → “B” - スコア 90:
case 80, 90
にマッチ → “A” - スコア 100:
case 100
にマッチ → “S” - スコア 95: どのケースにもマッチしない → “E”
- スコア 30:
case 30, 40
にマッチ → “C” - スコア 80:
case 80, 90
にマッチ → “A” - スコア 100:
case 100
にマッチ → “S” - スコア 65:
case 50, 60, 70
にマッチ → “B”
結果の連結
上記の結果をまとめると、次のようになります:
- 60 → “B”
- 90 → “A”
- 100 → “S”
- 95 → “E”
- 30 → “C”
- 80 → “A”
- 100 → “S”
- 65 → “B”
これを連結すると、“BASECASB” になります。
出力結果
したがって、正しい選択肢は H)BASECASB が出力されることになります。
対象資格:Java SE17 認定資格