OK、私のコードはここにあります:http: //www.so.pastebin.com/m7V8rQ2n
知りたいこと...タイルに再描画できる画像があるとしましょう...将来のタイルをチェックする方法があるので、定義済みのタイルマップの範囲を超えないようにしますか?
私が地図の端にいたかのように...それは私がそれを通り過ぎさせないだろうか?
ありがとう。
OK、私のコードはここにあります:http: //www.so.pastebin.com/m7V8rQ2n
知りたいこと...タイルに再描画できる画像があるとしましょう...将来のタイルをチェックする方法があるので、定義済みのタイルマップの範囲を超えないようにしますか?
私が地図の端にいたかのように...それは私がそれを通り過ぎさせないだろうか?
ありがとう。
一般的に、防止ArrayIndexOutOfBoundsException
は、インデックスが範囲内にあることを確認するだけで実行できます。
JLS10.4アレイアクセス
すべての配列は0オリジンです。長さのある配列は、へ
n
の整数でインデックスを付けることができます。0
n-1
したがって、このような単純なチェックは非常に一般的です。
if (i >= 0 && i < arr.length) {
System.out.println(arr[i]);
}
チェックとアクセスの間に再割り当てされるなどの厄介なことを除けばarr
、上記のコードは決してスローしませんArrayIndexOutOfBoundsException
。
多くの場合、たとえば、長方形の「ボード」が2次元配列(つまり、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