【Java初心者向け】ArrayIndexOutOfBoundsExceptionとは?原因・解消方法

配列を使っていて、突然「ArrayIndexOutOfBoundsException」というエラーに出会ったことはありませんか?このエラーは初心者がよく陥る落とし穴です。

今回は、この「ArrayIndexOutOfBoundsException」というエラーの意味と発生する原因、そして対処方法について解説します。

なお、この解説記事は、未経験者向け無料プログラミングスクール「アキバ・テックドリーム・アカデミー」(以下、テクドリ)の講師であり、テクドリ運営企業のメディアファイブ株式会社(以下、メディアファイブ)に所属する現役エンジニア社員が執筆したものです。

ArrayIndexOutOfBoundsExceptionとは

ArrayIndexOutOfBoundsExceptionとは、不正なインデックスを使って配列にアクセスされた場合にスローされる例外です。

「不正なインデックスを使う」とは、下記のような場合です。

  • インデックスが負の数
  • インデックスが配列のサイズ以上の数

配列やインデックスについて、詳しくは以下の記事をご参照ください。

関連記事

この記事では、テックドリームの講師がプログラミングについて、未経験の方にも分かりやすくご紹介いたします! 今回はJavaにおいての「配列」とは何か、書き方など具体例を踏まえながら解説します。 配列とは 1つの値を保管できる変数に対して[…]

ArrayIndexOutOfBoundsExceptionが発生する例と解消方法

インデックスが負の数の場合

配列から値を取り出す際に、インデックスに負の数(0より小さい数)を指定している場合、ArrayIndexOutOfBoundsExceptionが発生します。
配列から値を取り出す際に、インデックスに負の数(0より小さい数)を指定している場合、そのインデックスにアクセスしようとしたタイミングで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]);
  }
}
実行結果

インデックスが配列のサイズ以上の数の場合

インデックスに配列のサイズ以上の数を指定している場合、そのインデックスにアクセスしようとしたタイミングでArrayIndexOutOfBoundsExceptionが発生します。

インデックスに配列のサイズ以上の数を指定している場合、そのインデックスにアクセスしようとしたタイミングでArrayIndexOutOfBoundsExceptionが発生します。

例外が発生するサンプルコード

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エンジニアとして採用されるため、就職、転職活動は不要です。

ご興味がある方は、ぜひ下記リンクから無料体験セミナーにお申し込みください!

まずは無料説明会・体験セミナー

テックドリームは無料のプログラミングスクールです。「プログラマってどういう仕事?」「自分にできるのかな?」という方も、まずは体験セミナーでプログラミングに触れてみませんか?テックドリームは未経験の方を丁寧にサポートする体制をご用意しています。不安なことや、入校までの疑問点なども気軽にご相談いただけます。

Webかんたん予約

専用の予約フォームより、およそ60秒で簡単にお申込みいただけます。

電話でのご予約

Webかんたん予約ができない場合や、ご質問がございましたら、お気軽にお電話ください。

0120-262-242
9:00~18:00(土日祝を除く)
最新情報をチェックしよう!
>テクド・リム

テクド・リム


「テクドリ」の公式キャラクター。
エンジニアだった父の影響を受けて、夢に向かって日々勉強に励むエンジニアのタマゴ。
夢は「世界を変える、すごいエンジニアになること!」

年齢:不詳
特技:ブラインドタッチ
得意な言語:Java・Javascript
趣味:オンラインゲーム・動画漁り
好きな食べ物:ラーメン・焼き肉
嫌いな食べ物:ネギ・緑系の野菜全般

CTR IMG