¿Qué significa ArrayIndexOutOfBoundsException
y cómo puedo deshacerme de ella?
Aquí hay un ejemplo de código que desencadena la excepción:
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
Su primer puerto de escala debería ser la documentación que lo explica de forma razonablemente clara:
Se lanza para indicar que se ha accedido a un array con un índice ilegal. El índice es negativo o mayor o igual que el tamaño del array.
Así, por ejemplo:
int[] array = new int[5];
int boom = array[10]; // Throws the exception
En cuanto a cómo evitarlo... um, no lo hagas. Ten cuidado con los índices de tus arrays.
Un problema con el que a veces se encuentra la gente es pensar que los arrays están indexados en 1, por ejemplo
int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
System.out.println(array[index]);
}
Eso hará que se pierda el primer elemento (índice 0) y lanzará una excepción cuando el índice sea 5. Los índices válidos aquí son 0-4 inclusive. La declaración correcta e idiomática "para" aquí sería:
for (int index = 0; index < array.length; index++)
(Eso's asumiendo que usted necesita el índice, por supuesto. Si puede utilizar el bucle for mejorado en su lugar, hágalo).
if (index < 0 || index >= array.length) {
// Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
// Yes, you can safely use this index. The index is present in the array.
Object element = array[index];
}
Actualización: según su fragmento de código,
for (int i = 0; i<=name.length; i++) {
El índice es inclusivo de la longitud del array. Esto está fuera de los límites. Tienes que sustituir <=
por <
.
for (int i = 0; i < name.length; i++) {
Significa que estás intentando acceder a un índice de un array que no es válido porque no está entre los límites.
Por ejemplo, esto inicializaría un array de enteros primitivos con el límite superior 4.
int intArray[] = new int[5];
Los programadores cuentan desde cero. Así que esto, por ejemplo, lanzaría una ArrayIndexOutOfBoundsException
ya que el límite superior es 4 y no 5.
intArray[5];