0

OK、私のコードはここにあります:http: //www.so.pastebin.com/m7V8rQ2n

知りたいこと...タイルに再描画できる画像があるとしましょう...将来のタイルをチェックする方法があるので、定義済みのタイルマップの範囲を超えないようにしますか?

私が地図の端にいたかのように...それは私がそれを通り過ぎさせないだろうか?

ありがとう。

4

1 に答える 1

3

一般的に、防止ArrayIndexOutOfBoundsExceptionは、インデックスが範囲内にあることを確認するだけで実行できます。

JLS10.4アレイアクセス

すべての配列は0オリジンです。長さのある配列は、へnの整数でインデックスを付けることができます。0n-1

したがって、このような単純なチェックは非常に一般的です。

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

チェックとアクセスの間に再割り当てされるなどの厄介なことを除けばarr、上記のコードは決してスローしませんArrayIndexOutOfBoundsException


2Dアレイ「ボード」

多くの場合、たとえば、長方形の「ボード」が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

于 2010-06-02T06:39:38.067 に答える