【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 にまとめてあります