範囲外の添字
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
int[] a = new int[3];
for (int i = 0; i <= a.length; i++) {
a[i] = i;
}
System.out.println(a[2]);
}
}
- A
2と出力される - B
3と出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: C
- A: ループの途中で例外が発生するので、println まで進みません。
- B: a[3] に代入しようとした時点で例外になります。
- C: 条件が
i <= a.lengthなので、i が 3 のときに a[3] へアクセスして範囲外になります。 - D: 添字の範囲は実行時にしか分からないので、コンパイルはできます。
ポイント
- 添字は 0 から
length - 1までです。条件がi <= a.lengthなので、i が 3 のときに範囲外になります。
「配列 (一次元配列、二次元配列) の宣言、インスタンス化、初期化および使用」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)