Значение (не индекс) больше 3 в массиве вызывает java.lang.ArrayIndexOutOfBoundsException - PullRequest
0 голосов
/ 12 февраля 2012

Я начинающий программист.Это может быть простой проблемой, но я никогда не видел этого раньше.Прежде всего, позвольте мне уточнить, что я даже не пытаюсь манипулировать индексом.Вот часть кода, которая вызывает исключение:

    int[] bumpercatcher = new int[4];


//time variable that helps control events
int time = 0;

public void setup()
{
    bumpercatcher[0]=4;
    bumpercatcher[1]=4;
    bumpercatcher[2]=4;
    bumpercatcher[3]=4;

Как видите, я пытаюсь установить их все равными 4 в начале программы.Это вызывает исключение arrayindexoutofbounds.Если я установлю их все равными 0 ~ 3, то проблем не будет (пока я не установлю их на значение больше 3 позже в программе).Я не понимаю.

- не имеет значения, если я установлю размер массива в 10, я все еще получаю то же исключение

- это не имеет значения, если я установлю толькоодно из значений (то есть по индексу 1, который определенно в пределах массива).то же исключение

Что-то я не так делаю?Спасибо.

ну, вот и весь код, если вы хотите взглянуть (не слишком длинный, 1 класс, плохие навыки программирования): http://dl.dropbox.com/u/33501308/Pong.java

Вот HTML, из которого выя могу видеть программу из (не так много, чтобы увидеть. она просто мгновенно зависает.): http://dl.dropbox.com/u/33501308/bin.zip

по тому, как я использую затмение.

Я действительно не знаю, что такое SSCEEявляется.извините

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Ваш файл опубликованного кода включает в себя петли вдоль линий

for(int j: bumpercatcher) { 
    if(bumpercatcher[j]>5) 
       ... 
}

Это проблема. Это другой вид цикла, чем традиционный цикл for. Это расширенный или расширенный формат, также называемый foreach . Он гласит «для каждого целого числа j в массиве bumpercatcher do x». Вы берете свой элемент j (значение) и используете его как индекс для массива. Когда ваше значение превысит максимальный индекс, вы получите исключение.

Напишите свой код с правильным циклом for, если вы хотите получить доступ по индексу, или попробуйте просто перестроить свою логику, например

for (int j : bumpercatcher) {
    if (j > 5) // j is the value!
        ...
}
0 голосов
/ 12 февраля 2012

Я не уверен, в чем проблема, но гораздо более читаемый способ сделать это с помощью цикла for:

for(int i = 0; i < bumpercatcher.length; i++) {
    bumpercatcher[i] = 4;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...