ArrayList java.lang.ArrayIndexOutOfBoundsException: length=10; индекс=10

Смайвам се от тази грешка.

java.lang.ArrayIndexOutOfBoundsException: length=10; index=10

По-долу е кодът, който причинява изключението. 'keys' е ArrayList.

    for (int i = 0; i < keys.size(); i++) {
        if (values[i] != null) {
            contentValues.put(keys.get(i), String.valueOf(values[i]));
        }
    }

Какво може да причинява това изключение outOfBoundsException?


person Jordan Taylor    schedule 25.09.2014    source източник
comment
На кой ред е тази грешка?   -  person Daniel Kaplan    schedule 25.09.2014
comment
Вие не проверявате границите на достъпа си до values.   -  person rgettman    schedule 25.09.2014
comment
Вашият масив от стойности е дълъг 10 елемента, започвайки с 0 и стигайки до 9. Изглежда, че keys е дълъг единадесет елемента - затова ще завършите с i == 10. Къде дефинирате ключове?   -  person thegrinner    schedule 25.09.2014


Отговори (2)


грешката е доста обяснима. Индексът, до който се опитвате да получите достъп, не съществува. Java използва нулево индексиране. Което означава, че ако имате нещо с размер 10, неговите индекси са 0-9

Във вашия for цикъл никога не проверявате дали values[i] може да стигне до 10; Което явно не може.

Както изглежда, values[] е с размер 10, а keys е по-голям.

person qbit    schedule 25.09.2014
comment
Благодаря ти. Не мога да повярвам, че не забелязах това. - person Jordan Taylor; 25.09.2014

Предполагам, че грешката е в израза if. Откъде знаеш, че values[i] съществува? Вие не итерирате на values, вие итерирате на keys.

Но не сте ни дали достатъчно информация, за да знаем със сигурност. На кой ред се случва това?

person Daniel Kaplan    schedule 25.09.2014