¿Qué causa una excepción java.lang.ArrayIndexOutOfBoundsException y cómo puedo evitarla?

Resuelto Aaron asked hace 13 años • 25 respuestas

¿Qué ArrayIndexOutOfBoundsExceptionsignifica y cómo me deshago de él?

Aquí hay un ejemplo de código que desencadena la excepción:

String[] names = { "tom", "bob", "harry" };
for (int i = 0; i <= names.length; i++) {
    System.out.println(names[i]);
}
Aaron avatar Apr 05 '11 22:04 Aaron
Aceptado

Su primer punto de referencia debe ser la documentación que lo explique con razonable claridad:

Se lanza para indicar que se ha accedido a una matriz con un índice ilegal. El índice es negativo o mayor o igual que el tamaño de la matriz.

Así por ejemplo:

int[] array = new int[5];
int boom = array[10]; // Throws the exception

En cuanto a cómo evitarlo... um, no hagas eso. Tenga cuidado con los índices de su matriz.

Un problema con el que a veces se encuentra la gente es pensar que las matrices están indexadas 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 omitirá el primer elemento (índice 0) y generará una excepción cuando el índice sea 5. Los índices válidos aquí son del 0 al 4 inclusive. La declaración idiomática correcta foraquí sería:

for (int index = 0; index < array.length; index++)

(Eso supone que necesita el índice, por supuesto. Si puede usar el bucle for mejorado, hágalo).

Jon Skeet avatar Apr 05 '2011 15:04 Jon Skeet

Básicamente:

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];
}

En su caso específico,

for (int i = 0; i<=name.length; i++)

el índice incluye la longitud de la matriz. Esto está fuera de límites. Necesitas reemplazar <=por <.

for (int i = 0; i < name.length; i++)

Ver también:

  • Los tutoriales de Java - Conceptos básicos del lenguaje - Matrices
BalusC avatar Apr 05 '2011 15:04 BalusC

De este excelente artículo: ArrayIndexOutOfBoundsException en bucle for

Para decirlo brevemente:

En la última iteración de

for (int i = 0; i <= name.length; i++) {

iserá igual name.lengtha cuál es un índice ilegal, ya que los índices de matriz tienen base cero.

Tu código debería leer

for (int i = 0; i < name.length; i++) 
                  ^
aioobe avatar Apr 05 '2011 16:04 aioobe

Significa que está intentando acceder a un índice de una matriz que no es válida porque no se encuentra entre los límites.

Por ejemplo, esto inicializaría una matriz de enteros primitiva con el límite superior 4.

int intArray[] = new int[5];

Los programadores cuentan desde cero. Entonces, esto, por ejemplo, arrojaría un ArrayIndexOutOfBoundsExceptionya que el límite superior es 4 y no 5.

intArray[5];
Octavian Helm avatar Apr 05 '2011 15:04 Octavian Helm