問題
次のコードをコンパイル、実行するとどうなりますか。
public class Main {
public static void main(String... args) {
final var b = 2;
var a = b;
while (a < 5) {
switch (a % 2) {
case 0:
++a;
break;
case 1:
a++;
default:
break;
}
}
System.out.println(a);
}
}
選択肢
A)コンパイルエラーになる
B)4 が出力される
C)6 が出力される
D)5 が出力される
E)2 が出力される
F)3 が出力される
G)while ループが終了せず何も出力されない
解答
A)コンパイルエラーになる
B)4 が出力される
C)6 が出力される
D)5 が出力される
E)2 が出力される
F)3 が出力される
G)while ループが終了せず何も出力されない
解説
実行の流れ
b
は 2 で初期化され、a
も 2 になります。while
ループがa < 5
の条件で始まります。
ループの繰り返し
- 1回目 (
a = 2
):switch (2 % 2)
はcase 0
になります。++a
によりa
は 3 になります。
- 2回目 (
a = 3
):switch (3 % 2)
はcase 1
になります。a++
によりa
は 4 になります。break
がないため、default:
に進みますが、何も実行されず(break
だけ)。
- 3回目 (
a = 4
):switch (4 % 2)
はcase 0
になります。++a
によりa
は 5 になります。
- ループが再度実行されると
a < 5
の条件が成り立たず、ループを終了します。
結果
System.out.println(a);
により、最終的に a
の値である 5 が出力されます。
したがって、正解は D)5 が出力される です。
対象資格:Java SE17 認定資格