配列を使っていて、突然「ArrayIndexOutOfBoundsException」というエラーに出会ったことはありませんか?このエラーは初心者がよく陥る落とし穴です。
今回は、この「ArrayIndexOutOfBoundsException」というエラーの意味と発生する原因、そして対処方法について解説します。
なお、この解説記事は、未経験者向け無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師であり、テクドリ運営企業のメディアファイブ株式会社(以下、メディアファイブ)に所属する現役エンジニア社員が執筆したものです。
ArrayIndexOutOfBoundsExceptionとは
ArrayIndexOutOfBoundsExceptionとは、不正なインデックスを使って配列にアクセスされた場合にスローされる例外です。
「不正なインデックスを使う」とは、下記のような場合です。
- インデックスが負の数
- インデックスが配列のサイズ以上の数
配列やインデックスについて、詳しくは以下の記事をご参照ください。
この記事では、テックドリームの講師がプログラミングについて、未経験の方にも分かりやすくご紹介いたします! 今回はJavaにおいての「配列」とは何か、書き方など具体例を踏まえながら解説します。 配列とは 1つの値を保管できる変数に対して[…]
ArrayIndexOutOfBoundsExceptionが発生する例と解消方法
インデックスが負の数の場合
例外が発生するサンプルコード
class Sample {
public static void main(String[] args) {
// 配列を初期化
String[] strArray = {"あ", "い", "う", "え", "お"};
int index = 0;
// 配列の最初に格納されている値を表示
System.out.println(strArray[index - 1]);
}
}
実行結果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 5
at Sample.main(Sample.java:11)
サンプルでは、下記のように配列のインデックスが0から始まることを意識しすぎて、ArrayIndexOutOfBoundsExceptionが発生してしまいました。
- インデックスを0で設定する。
int index = 0;
- インデックスから1を引く。
strArray[index - 1]
どちらかを修正すれば良いのですが、今回はindexを「1番目の値」と考えて以下のように修正します。
解消例
class Sample {
public static void main(String[] args) {
// 配列を初期化
String[] strArray = {"あ", "い", "う", "え", "お"};
int index = 1;
// 配列の最初に格納されている値を表示
System.out.println(strArray[index - 1]);
}
}
実行結果
あ
インデックスが配列のサイズ以上の数の場合
例外が発生するサンプルコード
class Sample {
public static void main(String[] args) {
// 配列を初期化
int[] array = {-1, 0, 1, 2, 3};
for (int i = 0; i <= array.length; i++) {
// 配列に格納されている値を順番に表示
System.out.println(array[i]);
}
}
}
実行結果
-1
0
1
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
at Sample.main(Sample.java:11)
解消例
インデックスは0から始まるため、配列のサイズより1つ小さい値までしかない事に注意しましょう。
class Sample {
public static void main(String[] args) {
// 配列を初期化
int[] array = {-1, 0, 1, 2, 3};
for (int i = 0; i < array.length; i++) {
// 配列に格納されている値を順番に表示
System.out.println(array[i]);
}
}
}
実行結果
-1
0
1
2
3
コマンドライン引数のよくある間違い
コマンドライン引数が配列である事を認識しておらず、この例外を引き起こすことがあります。
プログラミング初心者の方によくある間違いの一つです。
上記で解説した「インデックスが配列のサイズ以上の数の場合」と同じ現象が起こります。
サンプルコード
class Sample {
public static void main(String[] args) {
// コマンドライン引数を表示
System.out.println(args[0]);
}
}
例外が発生する実行コマンドと結果
C:\JAVA>java Sample
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Sample.main(Sample.java:6)
解消例
コマンドライン引数を利用する際には、実行時に引数を渡す事を忘れないようにしましょう。
C:\JAVA>java Sample 100
100
ArrayIndexOutOfBoundsExceptionのまとめ
今回は、プログラミング初心者が最初につまづく例外のひとつ、ArrayIndexOutOfBoundsExceptionについて解説しました。
ArrayIndexOutOfBoundsExceptionとは、不正なインデックスを使って配列にアクセスされた場合にスローされる例外で下記のような場合に発生します。
- インデックスが負の数
- インデックスが配列のサイズ以上の数
配列のインデックスが原因で起こる例外なので、「ArrayIndexOutOfBoundsException」発生時には、配列使用箇所の「インデックスが正しいか」に注目しましょう。
当校テクドリは無料プログラミングスクールです。現役エンジニアの講師が学習をしっかりサポートします!
6ヶ月以上の学習期間が設けられているため、プログラミング未経験者でも安心して学べます。
卒業後は、運営企業のメディアファイブへ正社員のITエンジニアとして採用されるため、就職、転職活動は不要です。
ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!