エラー文を理解して、すぐにプログラムを修正できるようになりたいと思い初心者が覚えておくべきエラー文を中心に勉強してみます。(Java Programming Silverレベル)
今回はArrayIndexOutOfBoundsExceptionです。
ArrayIndexOutOfBoundsExceptionとは
ArrayIndexOutOfBoundsExceptionは配列のサイズ以上または負の値で配列にアクセスした時に発生します。
ちなみに英語の「Array Index Out Of Bounds Exception」を日本語に訳すと「範囲外の配列インデックスの例外」となります。
配列のサイズ以上にアクセスした時とは
実際にコードで見てみましょう。
EclipseやpaizaなどでJavaを実行して確認するとわかりやすいと思います。
参考記事:Javaのコードをオンライン上でサクッと確認できるpaiza.IOで効率的に勉強する!
配列のサイズ以上にアクセスした時のサンプルコード
int [] num = {0, 1, 2, 3};
System.out.print(num[4]);
配列 num の要素が4つでインデックスが0〜3までなのに対してインデックスの4を呼び出していることからArrayIndexOutOfBoundsExceptionが発生しています。
負の値で配列にアクセスした時とは
負の値で配列をアクセスした時とはマイナスの値でアクセスした時となります。
負の値で配列にアクセスした時サンプルコード
int [] num = {0, 1, 2, 3};
System.out.print(num[-1]);
配列 num の要素が4つでインデックスが0〜3なので -1 はアクセスできず、ArrayIndexOutOfBoundsExceptionが発生しています。
ちなみにマイナスがだめというわけではなく -0 であれば 0 なので0番目のインデックスにアクセスできます。
Java以外の言語ではマイナスで逆順でインデックスを呼び出せたりするので、他言語を利用していた方はうっかりマイナスを使わないようにしましょう。
おまけ
Javaの勉強をしていると出てくる私の嫌いな問題です。
int [] array = {};
array[0] = 10;
こちらは中身のない配列に対して(要素数 0)、存在しない要素へ値を代入しようとしているためArrayIndexOutOfBoundsExceptionが発生します。
※ 要素数のない配列を作成してもコンパイルエラーにはならない
要素数のない配列とか混乱するからやめてほしい。
おわり
ArrayIndexOutOfBoundsExceptionはよく見かけるエラーなので、覚えようとしなくても自然とあーまたかと反応できるようになると思います。
例外が発生する時に使用するtry-catchについては以下でまとめています。