【Java SE17 Silver 模擬試験】B-27

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードをコンパイル、実行するとどうなりますか。

public class Main {
	int i;

	public Main(int i) {
		i = ++i;
	}

	public void process() {
		int sum = 0;
		for (var j = i; j < 10; j++) {
			if (i++ % 3 != 0)
				continue;
			sum += j;
		}
		System.out.println(sum);
	}

	public static void main(String... args) {
		new Main(3).process();
	}
}

選択肢

A)ArrayIndexOutOfBoundsException がスローされる

B)15 が出力される

C)0 が出力される

D)13 が出力される

E)コンパイルエラーになる

F)18 が出力される

解答

A)ArrayIndexOutOfBoundsException がスローされる

B)15 が出力される

C)0 が出力される

D)13 が出力される

E)コンパイルエラーになる

F)18 が出力される

解説

このコードを詳しく見ていきましょう。

コードの解説

1. コンストラクタ

public Main(int i) {
    i = ++i;
}
  • ここで i はメソッドの引数として受け取った値ですが、クラスのインスタンス変数 this.i ではなく、ローカル変数 i に代入されています。したがって、インスタンス変数 this.i は初期化されず、デフォルト値の 0 のままになります。

2. processメソッド

public void process() {
    int sum = 0;
    for (var j = i; j < 10; j++) {
        if (i++ % 3 != 0)
            continue;
        sum += j;
    }
    System.out.println(sum);
}
  • i の初期値は 0 ですので、j0 から始まります。
  • ループは j < 10 になるまで続きます。

ループの動作

  • j = 0
    • if (0++ % 3 != 0)0 % 3 == 0 なので、条件が真でないため continue しない。
    • sum += 0sum0 になる。
  • j = 1
    • if (1++ % 3 != 0)1 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 2
    • if (2++ % 3 != 0)2 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 3
    • if (3++ % 3 != 0)3 % 3 == 0 なので、条件が真でないため continue しない。
    • sum += 3sum3 になる。
  • j = 4
    • if (4++ % 3 != 0)4 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 5
    • if (5++ % 3 != 0)5 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 6
    • if (6++ % 3 != 0)6 % 3 == 0 なので、条件が真でないため continue しない。
    • sum += 6sum9 になる。
  • j = 7
    • if (7++ % 3 != 0)7 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 8
    • if (8++ % 3 != 0)8 % 3 != 0 なので、continue し、sum は変わらず。
  • j = 9
    • if (9++ % 3 != 0)9 % 3 == 0 なので、条件が真でないため continue しない。
    • sum += 9sum18 になる。

ループの終了

ループが j < 10 の条件により、j10 になるとループが終了します。

最終的な出力

最後に、System.out.println(sum); によって sum の値(18)が出力されます。

したがって、正しい選択肢は F)18 が出力される です。

前の問題へ SE17_B-26

次の問題へ SE17_B-28

対象資格:Java SE17 認定資格