【Java】java.lang.IndexOutOfBoundsExceptionのエラー回避

【Java】java.lang.IndexOutOfBoundsExceptionのエラー回避

管理人
この記事ではjava.lang.IndexOutOfBoundsExceptionのエラーと回避方法について解説します。

「java.lang.IndexOutOfBoundsException」範囲外のIndexにアクセスしようとした際に起こるエラーです。

List<Object> list= new ArrayList <>(Arrays.asList(12345));
int num = (Integer)list.get(10);
System.out.println(num);

// 実行結果
Exception in thread "main" java.lang.IndexOutOfBoundsException:
Index 10 out of bounds for length 1

 「Index 10 out of bounds for length 1」➡Listの長さが1(※12345の一つのデータのみ)なのにIndexは10を指定しているからエラーという意味です。

 データが問題なく取れているかどうか確認すればよいです。「length …」と書かれている部分が想定しているデータ数なのか見るべき点です。

 なお、ListのIndexはゼロスタートのため次のようなプログラムはNGです。

public void tesuto() {
List<Object> list= new ArrayList <>(Arrays.asList(12345));
int num = (Integer)list.get(1);
System.out.println(num);

// 実行結果
Exception in thread "main" java.lang.IndexOutOfBoundsException:
Index 1 out of bounds for length 1

 下の例でようやく問題解決します

List<Object> list= new ArrayList <>(Arrays.asList(12345));
int num = (Integer)list.get(0);
System.out.println(num);

// 実行結果
12345

 エラー回避するには、指定範囲外のIndexにアクセスしないことにつきます。

 そのため,sizeメソッドで要素数を取得し、条件分岐で範囲外のアクセスに制御を掛けます

int listsize =list.size();
int num = 0;
if (listsize > 1) {
num = (Integer)list.get(1);
}
System.out.println(num);

// 実行結果
0

 範囲外のアクセス制御ができました。※ただし、「java.lang.IndexOutOfBoundsException」のケースはそもそものListが取れていないことが原因でエラーのケースも大いにあり得るため確認の上、制御するかどうか決める方がよいです。

管理人
Javaの記事の一覧はJava にまとめてあります

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP