Java Lang Index Out of Bounds 例外の解決策
-
java.lang.IndexOutOfBoundsException
の原因 -
ArrayList を考慮した
java.lang.IndexOutOfBoundsException
の解決策 -
配列を考慮した
java.lang.ArrayIndexOutOfBoundsException
の解決策
今日は、Arrays と ArrayList を考慮した IndexOutOfBoundsException
エラーについて説明します。 また、このエラーの原因と、最終的にそれを解決する方法も理解します。
java.lang.IndexOutOfBoundsException
の原因
IndexOutOfBoundsException
エラーが発生する理由は、Arrays と ArrayList で似ていますが、エラーの説明が異なるという 1つの違いがあります。 このエラーは、Arrays と ArrayList でそれぞれ java.lang.ArrayIndexOutOfBoundsException
と java.lang.IndexOutOfBoundsException
として取得されます。
この例外の原因は次のとおりです。
- ArrayList が空の場合、最初のインデックス (0) の値にアクセスしようとします。
- 負のインデックスで Array または ArrayList の項目にアクセスしようとした場合。
- Array または ArrayList の無効なインデックスにアクセスしようとした場合。これは、Array または ArrayList のサイズに負の値、等しい、または大きい可能性があります。
IndexOutOfBoundsException
は、コンパイル時に Java コンパイラによって検出されない実行時例外であることを思い出してください。 そのため、Array または ArrayList にアクセスする方法を知る必要があります。
経験則として、アクセスする前に Array または ArrayList に値を設定する必要があります。 さらに、0 <= index < (Array/ArrayList size)
という条件を満たすインデックスにのみアクセスできます。
コード例の助けを借りてそれを学びましょう。
ArrayList を考慮した java.lang.IndexOutOfBoundsException
の解決策
コード例:
import java.util.ArrayList;
public class TestArrayList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// we try to get value at index 0 which is
// empty right now
System.out.println(list.get(0));
list.add("Mehvish"); // saves at index 0
list.add("Ashiq"); // saves at index 1
}
}
上記のコードは、まだ入力されていないインデックス 0
にアクセスしているため、IndexOutOfBoundsException
エラーを引き起こしています。
このエラーを解決するには、最初に ArrayList に項目を追加し、次に無効なインデックスにアクセスしていないことを確認してそれらにアクセスする必要があります。 次のコードでは、IndexOutOfBoundsException
を引き起こす可能性のあるすべての状況を処理しました。
コード例:
import java.util.ArrayList;
public class TestArrayList {
// create array list object of String type
static ArrayList<String> list = new ArrayList<>();
// populate array list
static void populateList() {
list.add("Mehvish"); // saves at index 0
list.add("Ashiq"); // saves at index 1
}
/*
Access the index only if the index
is valid and the list is not empty. Otherwise, print
the message to inform the user
*/
static void getElement(int index) {
if (list.size() != 0 && index >= 0 && index < list.size()) {
System.out.println(list.get(index));
} else {
System.out.println("The list is empty or you have entered an invalid index");
}
}
// main method
public static void main(String[] args) {
populateList();
getElement(0);
}
}
このコードをさまざまな入力でテストしてみましょう。
テスト 1: ユーザーが 0
を getElement()
関数に渡すと、出力は次のようになります。
Mehvish
テスト 2: ユーザーが 1
を getElement()
関数に渡すと、出力は次のようになります。
Ashiq
テスト 3: ユーザーが 2
を getElement()
関数に渡すと、出力は次のようになります。
The list is empty or you have entered an invalid index
テスト 4: ユーザーが -1
を getElement()
関数に渡すと、出力は次のようになります。
The list is empty or you have entered an invalid index
テスト 5: ユーザーが populateList()
関数についてコメントし、有効なインデックスを渡します。 出力は次のようになります。
The list is empty or you have entered an invalid index
配列を考慮した java.lang.ArrayIndexOutOfBoundsException
の解決策
コード例:
public class TestArray {
public static void main(String[] args) {
int array[] = {1, 2, 3, 4, 5};
for (int i = 0; i <= array.length; i++) System.out.println(array[i]);
}
}
このコード例では、無効なインデックス 5
にアクセスしようとしたため、ArrayIndexOfBoundsException
が発生します。 無効なインデックスにはアクセスできないことに注意してください。
考えられるすべての状況を処理し、ArrayIndexOutOfBoundsException
エラーを回避した次のコードをテストしてみましょう。
コード例:
import java.util.ArrayList;
public class TestArray {
// required size of an array
static int size = 2;
// declare an int type array of specified size
static int array[] = new int[size];
// populate array
static void populateArray() {
for (int i = 0; i < size; i++) array[i] = i + 1;
}
// get element if a valid index is passed
static void getElement(int index) {
if (array.length != 0 && index >= 0 && index < array.length) {
System.out.println(array[index]);
} else {
System.out.println("The array is empty or you have entered an invalid index");
}
}
// main method
public static void main(String[] args) {
populateArray();
getElement(1);
}
}
このコードをさまざまなユーザー入力でテストしてみましょう。
テスト 1: ユーザーが 0
を getElement()
関数に渡すと、出力は次のようになります。
1
テスト 2: ユーザーが 1
を getElement()
関数に渡すと、出力は次のようになります。
2
テスト 3: ユーザーが 2
を getElement()
関数に渡すと、出力は次のようになります。
The array is empty or you have entered an invalid index
テスト 4: ユーザーが -1
を getElement()
関数に渡すと、出力は次のようになります。
The array is empty or you have entered an invalid index
テスト 5: ユーザーが populateArray()
関数についてコメントし、有効なインデックスを渡します。 出力は次のようになります。
0
なぜ0
なのですか? これは、空の配列を初期化したためです。ここで、0
は int 型のデフォルト値です。 要素を初期化しない場合、数値配列要素のデフォルト値は 0
に設定され、参照要素は null
に設定されます。
関連記事 - Java Error
- $' ': Java の Command Not Found エラーを修正
- Class X Is Public を X.java という名前のファイルで宣言する必要がある問題を修正
- Eclipse エラー: 選択を起動できません
- Eclipse で Java ランタイム環境を続行するにはメモリが不足しています
- Eclipse の`Java 仮想マシンが見つかりませんでした`というエラーを修正する
- IntelliJ IDEA のスレッド メイン Java.Lang.ClassNotFoundException での例外