2015-05-24 2 views
0

Что я пытаюсь сделать здесь, это использовать оператор if, чтобы проверить, является ли положение пикселей y больше или равно размеру оси y. Если это. Выйдите из цикла for, однако я все равно получаю исключение ArrayOutOfBoundsException. Как использовать функцию break при работе с циклами?Fixing ArrayOutOfBoundsException

public void render() { 
    counter++; 
    if (counter % 100 == 0) { 
     time++; 
    } 

    for (int y = 0; y < HEIGHT; y++) { 
     if (y >= HEIGHT - 10) break; 
     for (int x = 0; x < WIDTH; x++) { 

      pixels[time + time * WIDTH] = 0xff00ff; 
     } 

     if (y >= HEIGHT - 1) break; 

    } 

} 
+0

Пожалуйста, пост полный StackTrace вашего исключения – Timo

+0

Исключение в потоке "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 48762 \t на com.game.graphics.Screen.render (Screen.java:38) \t на ком .game.Game.render (Game.java:101) \t at com.game.Game.run (Game.java:81) \t at java.lang.Thread.run (Thread.java:745) –

+0

Пожалуйста, напишите сообщение * complete * stacktrace вашего исключения хорошо отформатирован на ваш вопрос. Какая строка - строка 38 вашего файла Screen.java? – Timo

ответ

0

Иногда значение, рассчитанное time + time * WIDTH больше или равно сумма элементов в pixels

0
pixels[time + time * WIDTH] = 0xff00ff; 

Если я понимаю ваш код, вы не измените время в цикле, так что, вероятно, вы должны умножить время + время на x или y (а не на WIDTH), поскольку WIDTH является константой.

0

Чтобы уточнить ответ Йоханнеса, вы неправильно вычисляете индекс в пиксельной матрице. Ваш расчет time + time * WIDTH, скорее всего, не даст желаемых результатов, так как значение time инициализируется вне метода render(), но оно увеличивается каждый раз, когда вызывается метод render(). Предполагая, что time имеет значение 0, вы получите исключение AOOB после того, как вы вызвали раз.

То, что вы, вероятно, имел в виду, чтобы написать был

for (int y = 0; y < HEIGHT; y++) { 
    for (int x = 0; x < WIDTH; x++) { 
     pixels[x + y * WIDTH] = 0xff00ff; 
    } 
} 

Предположив ваш пикселей массив, по крайней мере WIDTH х HEIGHT размера, то это не будет иметь исключение AOOB.