ArrayIndexOutOfBoundsException例外

Javaプログラミングでエラーが発生したときの対処方法などを簡単な例で紹介しています。
- Page 1 - << 先頭のページ< 前のページ次のページ >最後のページ >>



ArrayIndexOutOfBoundsException

このページには、以下のサンプルを掲載しています。 下の項目をクリックをすると各サンプルにジャンプします。 ※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。

■ArrayIndexOutOfBoundsException ( Sample1_1.java )
  1. package sample.err;
  2. public class ErrSample1_1 {
  3.   public static void main(String[] args) {
  4.     int[] list = new int[5];
  5.     for ( int i = 0; i <= 5; i++ ) {
  6.       list[i] = i;
  7.       System.out.println(list[i]);
  8.     }
  9.   }
  10. }
[ 実行結果 ]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
  at sample.err.ErrSample1_3.main(ErrSample1_1.java:8)
0
1
2
3
4

[ 解説 ]
よく出るエラーのひとつです。このエラーは、不正なインデックスで配列にアクセスしたときに出力されます。 上記実行結果の青字部分は、発生した例外(エラー)で、赤字部分は、ソースコード上のエラー発生行になります。 ErrSample1_1.javaの8行目でエラーが発生しましたと言うことになります。 サンプルの場合、配列のサイズは"5"なのでインデックスは、0〜4となります。for文の中で"i"の値が5になった ときに配列のサイズを超えた要素にアクセスしようとしてこのエラーが出力されます。サンプルでは、単純なロジック となっていますが、実際のプログラムでは、他のロジックとの関係もあり一概には言えませんが対処方法としては概ね 下のような方法が考えられます。

方法1
配列のサイズを増やす。赤字の部分を5から8に変更しています。配列のサイズがあらかじめわかっていてサイズの 変動がない場合には有効な方法となります。
  1. package sample.err;
  2. public class ErrSample1_1 {
  3.   public static void main(String[] args) {
  4.     int[] list = new int[8];
  5.     for ( int i = 0; i <= 5; i++ ) {
  6.       list[i] = i;
  7.       System.out.println(list[i]);
  8.     }
  9.   }
  10. }

方法2
配列のサイズを超えた要素にアクセスしないようにする。赤字の部分を"<="から"<"に変更しています。
これも方法1と同じく配列のサイズがあらかじめわかっている場合は有効です。
  1. package sample.err;
  2. public class ErrSample1_1 {
  3.   public static void main(String[] args) {
  4.     int[] list = new int[5];
  5.     for ( int i = 0; i < 5; i++ ) {
  6.       list[i] = i;
  7.       System.out.println(list[i]);
  8.     }
  9.   }
  10. }

方法3
配列のサイズを動的に生成する。配列をArrayListで定義しています。ArrayListは配列のサイズを自動で拡張します。 配列のサイズが実行時点までわからない場合やサイズが不定な場合に有効な方法となります。
  1. package sample.err;
  2. import java.util.ArrayList;
  3. public class ErrSample1_4 {
  4.   public static void main(String[] args) {
  5.     ArrayList<Integer> list = new ArrayList<Integer>();
  6.     for ( int i = 0; i <= 5; i++ ) {
  7.       list.add(i);
  8.       System.out.println(list.indexOf(i));
  9.     }
  10.   }
  11. }


- Page 1 - << 先頭のページ< 前のページ次のページ >最後のページ >>


最終更新日:2019/02/13

2015-03-01からの訪問者数
  1050 人