Вообще говоря, предотвратить ArrayIndexOutOfBoundsException
можно, просто убедившись, что индекс находится в пределах.
Все массивы имеют нулевое происхождение. Массив длиной 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
.