Solución para la excepción fuera de los límites del índice Java Lang
-
Causas de la excepción
java.lang.IndexOutOfBoundsException
-
Solución para la excepción
java.lang.IndexOutOfBoundsException
considerando ArrayList -
Solución para la excepción
java.lang.ArrayIndexOutOfBoundsException
considerando arreglos
Hoy, discutiremos el error IndexOutOfBoundsException
considerando Arrays y ArrayList. También entenderemos las razones que causan este error y, finalmente, cómo solucionarlo.
Causas de la excepción java.lang.IndexOutOfBoundsException
Las razones para tener el error IndexOutOfBoundsException
son similares en Arrays y ArrayList, excepto por una diferencia que es tener diferentes descripciones de error. Obtenemos este error en Arrays y ArrayList como java.lang.ArrayIndexOutOfBoundsException
y java.lang.IndexOutOfBoundsException
, respectivamente.
Las razones que causan esta excepción se enumeran a continuación:
- Cuando ArrayList esté vacío e intente acceder al valor en el primer índice, que es 0.
- Cuando intentamos acceder a un elemento en un Array o ArrayList en un índice negativo.
- Cuando intentamos acceder a un índice no válido de un Array o ArrayList, que puede ser negativo, igual o mayor que el tamaño de Array o ArrayList.
Recuerde que IndexOutOfBoundsException
es una excepción en tiempo de ejecución que el compilador de Java no detecta en el momento de la compilación. Entonces, es necesario saber cómo acceder al Array o ArrayList.
La regla general es que Array o ArrayList deben completarse antes de acceder a ellos. Además, solo podemos acceder a los índices que cumplan esta condición: 0 <= index < (Array/ArrayList size)
.
Aprendamos con la ayuda de ejemplos de código.
Solución para la excepción java.lang.IndexOutOfBoundsException
considerando ArrayList
Código de ejemplo:
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
}
}
El código anterior está causando el error IndexOutOfBoundsException
porque estamos accediendo al índice 0
, que aún no está poblado.
Para resolver este error, primero debemos agregar elementos en ArrayList y luego acceder a ellos asegurándonos de que no estamos accediendo a un índice no válido. En el siguiente código, hemos manejado todas las situaciones que pueden causar IndexOutOfBoundsException
.
Código de ejemplo:
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);
}
}
Probemos este código en varias entradas.
Prueba 1: El usuario pasa 0
a la función getElement()
, la salida sería,
Mehvish
Prueba 2: el usuario pasa 1
a la función getElement()
, la salida se verá así,
Ashiq
Prueba 3: El usuario pasa 2
a la función getElement()
, la salida sería,
The list is empty or you have entered an invalid index
Prueba 4: El usuario pasa -1
a la función getElement()
, el resultado es el siguiente,
The list is empty or you have entered an invalid index
Prueba 5: El usuario comenta sobre la función populateList()
y pasa un índice válido. La salida se verá de la siguiente manera,
The list is empty or you have entered an invalid index
Solución para la excepción java.lang.ArrayIndexOutOfBoundsException
considerando arreglos
Código de ejemplo:
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]);
}
}
Este ejemplo de código provoca la excepción ArrayIndexOfBoundsException
al intentar acceder al índice 5
, que no es válido. Recuerde, no podemos acceder a un índice inválido.
Probemos el siguiente código, que ha manejado todas las situaciones posibles y ha evitado el error ArrayIndexOutOfBoundsException
.
Código de ejemplo:
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);
}
}
Probemos este código en diferentes entradas de usuario.
Prueba 1: El usuario pasa 0
a la función getElement()
, la salida sería,
1
Prueba 2: el usuario pasa 1
a la función getElement()
, la salida se verá así,
2
Prueba 3: El usuario pasa 2
a la función getElement()
, la salida sería,
The array is empty or you have entered an invalid index
Prueba 4: El usuario pasa -1
a la función getElement()
, el resultado es el siguiente,
The array is empty or you have entered an invalid index
Prueba 5: El usuario comenta sobre la función populateArray()
y pasa un índice válido. La salida se verá de la siguiente manera,
0
¿Por qué es 0
? Es porque hemos inicializado una matriz vacía donde 0
es un valor predeterminado para el tipo int. Si no inicializamos los elementos, los valores predeterminados de los elementos de la matriz numérica se establecen en 0
, mientras que los elementos de referencia se establecen en nulo
.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase
Artículo relacionado - Java Exception
- Arreglar Java.Net.SocketException: error de tubería rota en Java
- Clase de excepción Java Throwable VS
- Comprender la excepción de tiempo de ejecución en Java
- Corrija la excepción Java.Net.BindException: la dirección ya está en uso: Bind
- El proceso de Java Gateway se cerró antes de enviar su número de puerto
- Excepción de entrada no válida en Java