Java-апплет - проверка массива - PullRequest
0 голосов
/ 02 июня 2010

ОК, поэтому мой код здесь: http://www.so.pastebin.com/m7V8rQ2n

Что я хочу знать ... скажем, у меня есть изображение, которое я могу перерисовать на плитках ... есть ли способ проверить будущие плитки, чтобы я НЕ ВЫХОДИЛ за пределы моей уже определенной карты плиток

Как если бы я был на краю карты ... он НЕ позволил бы мне пройти мимо нее?

Спасибо.

1 Ответ

3 голосов
/ 02 июня 2010

Вообще говоря, предотвратить ArrayIndexOutOfBoundsException можно, просто убедившись, что индекс находится в пределах.

JLS 10.4 Доступ к массиву

Все массивы имеют нулевое происхождение. Массив длиной n может быть проиндексирован целыми числами 0 до n-1.

Таким образом, такая простая проверка довольно типична:

if (i >= 0 && i < arr.length) {
    System.out.println(arr[i]);
}

Запрещая такие неприятные вещи, как arr переназначение между проверкой и доступом, приведенный выше код будет НИКОГДА не бросать ArrayIndexOutOfBoundsException.


2D массив "досок"

Часто вы можете быть более конкретным, например, когда у вас есть прямоугольные «доски», хранящиеся в двумерном массиве (точнее, массиве массивов в Java).

final int M = 10;  // height, i.e. number of rows
final int N = 8;   // width, i.e. number of columns
final int[][] board = new int[M][N];

Тогда у вас может быть метод, подобный следующему:

boolean isInBound(int r, int c) {
    return (r >= 0) && (r < M) && (c >= 0) && (c < N);
}

Связанный чек легче читать и писать, поскольку мы знаем, что у нас есть доска MxN . Если isInBound(r, c), то board[r][c] будет НИКОГДА бросить ArrayIndexOutOfBoundsException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...