#java
Вопрос:
Я создаю игру pacman. У меня есть массив размером 15×15, всего 225 полей. Когда я перехожу с 255 на 256, я получаю исключение ArrayIndexOutOfBoundsException, это имеет смысл. Чтобы я мог поймать его и выполнить некоторую операцию, скажем, я установил новую отправную точку pacman. Но если я перейду с поля 75 на поле 74, ничего не произойдет. Поэтому я спрашиваю, могу ли я как-то поймать это и выполнить какую-то операцию, как я упоминал выше.
Комментарии:
1. Я боюсь, что если вы не добавите некоторые примеры кода, трассировку стека, журналы и т. Д., Ваши шансы получить помощь будут очень низкими.
2. Ваш вопрос неясен, также вы имели в виду, когда я перешел с 225 на 226? Чего вы хотите, когда переедете с 75 на 74?
3. Вы не должны ловить его, вы должны избегать его возникновения, выполняя правильную проверку границ (или даже оборачиваясь, если это имеет смысл).
4. спасибо вам за ваши усилия, ребята, @Alex Shesterov исправьте мою проблему
Ответ №1:
Вам не следует полагаться ArrayIndexOutOfBoundsException
на нормальную логику. Это исключение указывает на ошибку программирования.
Вместо этого вам следует проверить индекс, прежде чем увеличивать его:
if (currentIndex == 255) {
// "special logic"
} else {
// "usual logic"
}
Таким образом, вы также можете обрабатывать любые «специальные» индексы, например
if ((currentIndex 1) % 15 == 0) {
// "special logic"
} else {
// "usual logic"
}
Еще один момент: рассмотрите возможность использования двух индексов — x и y — если вы программируете 2-D игру.
Каждое движение изменяет x и/или y, что может легко «обернуться», как в pacman (например 13 -> 14 ->> 15 ->>> 1 ->>>> 2 ->>>>> …).
И преобразуйте пару (x,y) в индекс только тогда, когда вам нужно получить доступ к элементу поля:
// Assuming that x and y are 1-based, not 0-based:
public FieldElement getFieldElementAtPosition(final int x, final int y) {
final int index = (y - 1) * FIELD_WIDTH x - 1;
return fieldArray[index];
}
Комментарии:
1. это имеет смысл, спасибо..с этим я должен решить свою проблему, хорошего дня 🙂