好的,所以我的代码在这里: http: //www.so.pastebin.com/m7V8rQ2n
我想知道...假设我有一个可以在图块上重绘的图像...有没有办法检查未来的图块,所以我不会超出我已经定义的图块地图的范围?
就像我在地图的边缘......它不会让我过去?
谢谢。
好的,所以我的代码在这里: http: //www.so.pastebin.com/m7V8rQ2n
我想知道...假设我有一个可以在图块上重绘的图像...有没有办法检查未来的图块,所以我不会超出我已经定义的图块地图的范围?
就像我在地图的边缘......它不会让我过去?
谢谢。
一般来说,ArrayIndexOutOfBoundsException
可以通过简单地确保索引在界限内来完成预防。
JLS 10.4 数组访问
所有数组都是 0-origin。具有长度的数组
n
可以由整数索引0
到n-1
。
因此,像这样的简单检查非常典型:
if (i >= 0 && i < arr.length) {
System.out.println(arr[i]);
}
除非出现令人讨厌的事情,例如arr
在检查和访问之间重新分配,否则上面的代码永远不会抛出ArrayIndexOutOfBoundsException
.
通常,您可以更具体,例如,当您将矩形“板”存储在二维数组(或者更确切地说,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
。