O que significa "ArrayIndexOutOfBoundsException" e como me livro dela?
Aqui está uma amostra de código que aciona a exceção:
String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
System.out.println(name[i]);
}
O seu primeiro porto de escala deve ser a documentação, o que o explica de forma razoavelmente clara:
Atirado para indicar que um array foi acessado com um índice ilegal. O índice é negativo ou maior ou igual ao tamanho do array.
Então, por exemplo:
int[] array = new int[5];
int boom = array[10]; // Throws the exception
Quanto a como evitá-lo... um, don'não faça isso. Tenha cuidado com os seus índices de matriz.
Um problema que as pessoas às vezes encontram é pensar que as matrizes são indexadas a 1, por exemplo
int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
System.out.println(array[index]);
}
Isso irá perder o primeiro elemento (índice 0) e lançar uma exceção quando o índice for 5. Os índices válidos aqui são 0-4 inclusive. A afirmação correta e idiomática `para' aqui seria:
for (int index = 0; index < array.length; index++)
(Isso's assumindo que você necessária do índice, é claro. Se, em vez disso, você pode usar o melhorado para loop, faça-o).
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];
}
*Atualização**: de acordo com o seu código snippet,
for (int i = 0; i<=name.length; i++) {
O índice é inclusive o comprimento do array's. Isto está fora dos limites. Você precisa substituir <=
por <
.
for (int i = 0; i < name.length; i++) {
Isso significa que você está tentando acessar um índice de um array que não é válido, pois não está entre os limites.
Por exemplo, isto inicializaria uma matriz inteira primitiva com o limite superior 4.
int intArray[] = new int[5];
Os programadores contam a partir de zero. Então isto, por exemplo, lançaria um "ArrayIndexOutOfBoundsException", já que o limite superior é 4 e não 5.
intArray[5];