What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
Что вызывает исключение java.lang.ArrayIndexOutOfBoundsException и как мне его предотвратить?
Что ArrayIndexOutOfBoundsException означает и как мне избавиться от этого?
Вот пример кода, который запускает исключение:
String[] names = { "tom", "bob", "harry" }; for (inti=0; i <= names.length; i++) { System.out.println(names[i]); }
Переведено автоматически
Ответ 1
Вашим первым адресом вызова должна быть документация, которая объясняет это достаточно четко:
Выдается для указания того, что доступ к массиву осуществлялся с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива.
Так, например:
int[] array = newint[5]; intboom= array[10]; // Throws the exception
Что касается того, как этого избежать ... гм, не делайте этого. Будьте осторожны с индексами массива.
Одна из проблем, с которой иногда сталкиваются люди, заключается в том, что они думают, что массивы проиндексированы на 1, например
int[] array = newint[5]; // ... populate the array here ... for (intindex=1; index <= array.length; index++) { System.out.println(array[index]); }
Это приведет к пропуску первого элемента (индекс 0) и вызовет исключение, когда индекс равен 5. Допустимые индексы здесь равны 0-4 включительно. Правильный идиоматический оператор for здесь будет:
for (intindex=0; index < array.length; index++)
(Это, конечно, при условии, что вам нужен индекс. Если вы можете вместо этого использовать расширенный цикл for, сделайте это.)
Ответ 2
В основном:
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. Objectelement= array[index]; }
В вашем конкретном случае,
for (inti=0; i<=name.length; i++)
индекс включает длину массива. Это выходит за рамки. Вам нужно заменить <= на <.