【Java】ArrayIndexOutOfBoundsExceptionの原因と対策

ArrayIndexOutOfBoundsExceptionは配列の範囲外のインデックスにアクセスしようとしたときに発生します

この例外はJavaの配列操作でよくある問題なんですよね…

主な原因とその対処法を以下にまとめます


1. 主な原因

配列のインデックス範囲外アクセス

配列の範囲 (0 から 配列.length – 1) を超えたインデックスを指定した場合に発生します

int[] arr = {1, 2, 3};
System.out.println(arr[3]); // 配列の長さは3だが、インデックス3は範囲外

ループ条件のミス

ループで範囲を誤って指定することが多いです

int[] arr = {1, 2, 3};
for (int i = 0; i <= arr.length; i++) { // <= は範囲外アクセスの原因
    System.out.println(arr[i]);
}

動的にサイズが変わる配列の扱い

配列を操作中にサイズが変更されると、範囲外アクセスが発生します(特に、ArrayListなどで要素を削除しながら処理する場合)


2. 実装改善の方法

範囲チェックを追加

配列にアクセスする前に、インデックスが範囲内かをチェックします

int[] arr = {1, 2, 3};
int index = 3;
if (index >= 0 && index < arr.length) {
    System.out.println(arr[index]);
} else {
    System.out.println("Invalid index: " + index);
}

ループ条件の見直し

配列をループする際は「i < 配列.length」を必ず守ります

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

拡張for文の活用

範囲を自動で処理する拡張 for 文を使うと安全です

for (int value : arr) {
    System.out.println(value);
}

forEachもよさそうよ

これも安全です

arr.forEach(System.out::println);

例外処理で対応

インデックスのエラーが避けられない場合、例外をキャッチして処理を続ける方法もあります

try {
    System.out.println(arr[3]);
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("Index out of bounds: " + e.getMessage());
}

個人的にはそもそもExceptionを発生させないかつ、シンプルな拡張for文が良いと思いましたね

是非参考ください!

是非フォローしてください

最新の情報をお伝えします