Что вызывает исключение java.lang.ArrayIndexOutOfBoundsException и как его предотвратить? - PullRequest
264 голосов
/ 05 апреля 2011

Что означает ArrayIndexOutOfBoundsException и как от него избавиться?

Вот пример кода, который вызывает исключение:

String[] name = { "tom", "dick", "harry" };
for (int i = 0; i <= name.length; i++) {
    System.out.println(name[i]);
}

Ответы [ 24 ]

1 голос
/ 11 ноября 2016

Для любого массива длины n элементы массива будут иметь индекс от 0 до n-1.

Если ваша программа пытается получить доступ к любому элементу (или памяти)Если индекс массива больше n-1, Java выдаст ArrayIndexOutOfBoundsException

Итак, вот два решения, которые мы можем использовать в программе

  1. Ведение отсчета:

    for(int count = 0; count < array.length; count++) {
        System.out.println(array[count]);
    }
    

    Или какой-либо другой оператор цикла, такой как

    int count = 0;
    while(count < array.length) {
        System.out.println(array[count]);
        count++;
    }
    
  2. Лучший способ использовать для каждого цикла, в этом методе программист не имеетнадо беспокоиться о количестве элементов в массиве.

    for(String str : array) {
        System.out.println(str);
    }
    
0 голосов
/ 17 июля 2018

Эта ошибка возникает при превышении лимита цикла выполнения. Давайте рассмотрим простой пример, подобный этому,

class demo{
  public static void main(String a[]){

    int[] numberArray={4,8,2,3,89,5};

    int i;

    for(i=0;i<numberArray.length;i++){
        System.out.print(numberArray[i+1]+"  ");
    }
}

Сначала я инициализировал массив как 'numberArray'.затем некоторые элементы массива печатаются с использованием цикла for.Когда цикл выполняется время 'i', выведите элемент (numberArray [i + 1] .. (когда значение i равно 1, элемент numberArray [i + 1] напечатан.) .. Предположим, что когда i = (numberArray.length-2), последний элемент массива печатается. Когда значение 'i' переходит в (numberArray.length-1), значение для печати не указывается. В этом месте возникает ArrayIndexOutOfBoundsException.идея. спасибо!

0 голосов
/ 17 мая 2018

ArrayIndexOutOfBoundsException само имя объясняет, что если вы пытаетесь получить доступ к значению по индексу, которое выходит за рамки размера массива, то возникает такой тип исключения.

В вашем случае вы можете просто удалить знак равенства из цикла for.

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

Лучший вариант - итерировать массив:

for(String i : name )
      System.out.println(i);
0 голосов
/ 19 января 2016

Вы не можете перебирать или хранить больше данных, чем длина вашего массива.В этом случае вы можете сделать так:

for (int i = 0; i <= name.length - 1; i++) {
    // ....
}

Или вот это:

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