Lösung für Java Lang Index Out-of-Bounds-Ausnahme
-
Ursachen der
java.lang.IndexOutOfBoundsException
-
Lösung für die
java.lang.IndexOutOfBoundsException
unter Berücksichtigung von ArrayList -
Lösung für die
java.lang.ArrayIndexOutOfBoundsException
unter Berücksichtigung von Arrays
Heute werden wir den Fehler IndexOutOfBoundsException
unter Berücksichtigung von Arrays und ArrayList besprechen. Wir werden auch die Gründe verstehen, die diesen Fehler verursachen, und schließlich, wie er behoben werden kann.
Ursachen der java.lang.IndexOutOfBoundsException
Die Gründe für den Fehler IndexOutOfBoundsException
sind in Arrays und ArrayList ähnlich, mit Ausnahme eines Unterschieds, der unterschiedliche Fehlerbeschreibungen hat. Wir erhalten diesen Fehler in Arrays und ArrayList als java.lang.ArrayIndexOutOfBoundsException
bzw. java.lang.IndexOutOfBoundsException
.
Die Gründe für diese Ausnahme sind unten aufgeführt:
- Wenn die ArrayList leer ist, versuchen Sie, auf den Wert am ersten Index zuzugreifen, der 0 ist.
- Wenn wir versuchen, auf ein Element in einem Array oder einer ArrayList bei einem negativen Index zuzugreifen.
- Wenn wir versuchen, auf einen ungültigen Index eines Arrays oder einer ArrayList zuzugreifen, der negativ, gleich oder größer als die Größe von Array oder ArrayList sein kann.
Denken Sie daran, dass die IndexOutOfBoundsException
eine Laufzeitausnahme ist, die vom Java-Compiler zur Kompilierzeit nicht erkannt wird. Daher ist es notwendig zu wissen, wie man auf das Array oder die ArrayList zugreift.
Als Faustregel gilt, dass das Array oder die ArrayList gefüllt werden muss, bevor Sie darauf zugreifen. Außerdem können wir nur auf die Indizes zugreifen, die diese Bedingung erfüllen: 0 <= index < (Array/ArrayList size)
.
Lassen Sie es uns anhand von Codebeispielen lernen.
Lösung für die java.lang.IndexOutOfBoundsException
unter Berücksichtigung von ArrayList
Beispielcode:
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
}
}
Der obige Code verursacht den Fehler IndexOutOfBoundsException
, weil wir auf den Index 0
zugreifen, der noch nicht gefüllt ist.
Um diesen Fehler zu beheben, müssen wir zuerst Elemente in der ArrayList hinzufügen und dann darauf zugreifen, indem wir sicherstellen, dass wir nicht auf einen ungültigen Index zugreifen. Im folgenden Code haben wir alle Situationen behandelt, die eine IndexOutOfBoundsException
verursachen können.
Beispielcode:
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);
}
}
Lassen Sie uns diesen Code an verschiedenen Eingaben testen.
Test 1: Der Benutzer übergibt 0
an die Funktion getElement()
, die Ausgabe wäre,
Mehvish
Test 2: Der Benutzer übergibt 1
an die Funktion getElement()
, die Ausgabe sieht so aus,
Ashiq
Test 3: Der Benutzer übergibt 2
an die Funktion getElement()
, die Ausgabe wäre,
The list is empty or you have entered an invalid index
Test 4: Benutzer übergibt -1
an die Funktion getElement()
, die Ausgabe ist wie folgt,
The list is empty or you have entered an invalid index
Test 5: Der Benutzer kommentiert die Funktion populateList()
und übergibt einen gültigen Index. Die Ausgabe sieht wie folgt aus,
The list is empty or you have entered an invalid index
Lösung für die java.lang.ArrayIndexOutOfBoundsException
unter Berücksichtigung von Arrays
Beispielcode:
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]);
}
}
Dieses Codebeispiel verursacht die ArrayIndexOfBoundsException
, weil versucht wird, auf den ungültigen Index 5
zuzugreifen. Denken Sie daran, dass wir nicht auf einen ungültigen Index zugreifen können.
Lassen Sie uns den folgenden Code testen, der alle möglichen Situationen behandelt und den Fehler ArrayIndexOutOfBoundsException
vermieden hat.
Beispielcode:
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);
}
}
Lassen Sie uns diesen Code mit verschiedenen Benutzereingaben testen.
Test 1: Der Benutzer übergibt 0
an die Funktion getElement()
, die Ausgabe wäre,
1
Test 2: Der Benutzer übergibt 1
an die Funktion getElement()
, die Ausgabe sieht so aus,
2
Test 3: Der Benutzer übergibt 2
an die Funktion getElement()
, die Ausgabe wäre,
The array is empty or you have entered an invalid index
Test 4: Benutzer übergibt -1
an die Funktion getElement()
, die Ausgabe ist wie folgt,
The array is empty or you have entered an invalid index
Test 5: Der Benutzer kommentiert die Funktion populateArray()
und übergibt einen gültigen Index. Die Ausgabe sieht wie folgt aus,
0
Warum ist es 0
? Das liegt daran, dass wir ein leeres Array initialisiert haben, wobei 0
ein Standardwert für den int-Typ ist. Wenn wir die Elemente nicht initialisieren, werden die Standardwerte der numerischen Array-Elemente auf 0
gesetzt, während die Referenzelemente auf null
gesetzt werden.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse
Verwandter Artikel - Java Exception
- Ausnahme bei ungültiger Eingabe in Java
- Ausnahme im Hauptthread Java.Util.NoSuchElementException: Keine Zeile gefunden
- Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException
- Beheben Sie die Java.Net.BindException: Adresse wird bereits verwendet: Bind
- Der Java-Gateway-Prozess wurde beendet, bevor seine Portnummer gesendet wurde
- Java Throwable vs. Ausnahmeklasse