🔴

【最新版】JavaでArrayIndexOutOfBoundsExceptionっていうエラーが出たときの対処法

2024/10/11に公開

はじめに

こんにちは。RaimuProjectのやむぅです。
今回は、Javaのコーディング中に起きたエラー「java.lang.ArrayIndexOutOfBoundsException」の解説や対処法についてお話ししていきます。
どんな不具合なのか、どうやって調査・対処すればいいの?という人向けに書いたものです。ぜひ読んで見ていただけると嬉しいです。

※ ちょこっと紹介!
現役エンジニアの僕が教える、フルスタックエンジニアを目指せるスクールを運営しています。
プログラミング初心者の方やリスキリングを考えている方にぜひ!

https://programing-factory.raimuproject.com/lp

開発環境

今回僕のMacを使っています。
そのためショートカットキーを使う際、WindowsのPCを使う人は以下のように変換して記事を見てください。

Mac Windows
⌘(Cmd) Ctrl
⌥(Option) Alt
⇧(Shift) Shift

:::note warn
ex)コピーのショートカット:
Mac → ⌘ + c
Windows → Ctrl + c
:::

エラー発生

Javaのプログラムを実行したらこんなエラーが発生した。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
	at testJava.Main.main(Main.java:8)

エラーの意味

java.lang.ArrayIndexOutOfBoundsExceptionは、配列の有効範囲外のインデックスにアクセスしようとしたときに発生する例外です。簡単に言うと「●番目の要素なんてないよ」というエラーです。具体的には、今回のエラーは配列の長さが3なのにインデックス3(4個目)にアクセスしようとしたため、このエラーが発生しています。Javaの配列インデックスは0から始まるので、長さ3の配列にアクセス可能なインデックスは0, 1, 2です。

原因と調べ方

まずこのエラーの原因は、配列の範囲外にアクセスしていることです。今回では、配列の長さが3であるにもかかわらず、インデックス3(存在しない4個目)にアクセスしようとしていることが問題です。

では次に調べ方ですが、まずはエラーメッセージを見ていきましょう。
エラーメッセージの確認:このメッセージでいうとtestJava.Main.main(Main.java:8)の部分を見て、エラーが発生した箇所の8行目を確認します。
配列の範囲の確認: 8行目のコードを見て、どの配列にアクセスしようとしているのか、その配列の長さとアクセスしているインデックスが適切か確認します。

確認する方法として、一番シンプルかつ初心者向けのやり方としては、配列の長さを出力して確認するといいでしょう。

対処法

対処法は状況と場合によっていろいろありますが、配列にアクセスする前に、そのインデックスが有効かを確認します。例えば、このようにif文を使ってインデックスが範囲内かどうかをチェックできます。

int[] array = {1, 2, 3};

int index = 3;
if (index < array.length) { // ←配列の範囲内(配列の長さ未満なこと)チェック
    System.out.println(array[index]);
} else {
    System.out.println("範囲外ですよ。");
}

最後に

この記事では、プログラミングをやり始めた初心者から実際にエンジニアとして働いた時の実務のコーディング中に発生したエラーやバグの調査方法から対処法、基礎的な知識をできる限りさっくりわかりやすく解説しています。

その他

現役エンジニアの僕が教える、

  • チャット質問で悩み解決
  • 週一で1 on 1メンタリング実施あり
  • 実務レベルの高難易度課題 & レビューあり
  • あなた専用のロードマップを一緒に作成
  • 案件や実務のエンジニアのリアルが学べる & 体験できる
  • 未経験から4ヶ月で<font color="OrangeRed">フルスタックエンジニア</font>を目指せる

こんな内容が学べる・経験できるプログラミングスクールです。
プログラミング初心者の方やリスキリングを考えている方にぜひ!

https://programing-factory.raimuproject.com/lp

Discussion