Перехват исключения arrayindexoutofboundsex в обратном направлении?

#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. это имеет смысл, спасибо..с этим я должен решить свою проблему, хорошего дня 🙂