我似乎无法弄清楚是否有人可以告诉我原因?
public class Display {
private int width,height;
public int [] pixels;
public int [] tiles = new int[64 * 64];
private Random random = new Random();
public Display(int width, int height) {
this.width = width;
this.height = height;
pixels = new int [width*height]; // 50400
for (int i = 0; i < 64 * 64; i++) {
tiles[i] = random.nextInt (0xffffff);
}
}
public void clear() {
for (int i = 0; i < pixels.length; i++) {
tiles[i] = random.nextInt (0xffffff);
}
}
public void render() {
for (int y = 0; y <height; y++) {
if (y < 0 || y >= height) break;
for (int x = 0; x < width; x++) {
if (x < 0 || x >=width) break;
int tileIndex = (x / 16) + (y / 16) * 64;
pixels[x+y*width] = tiles[tileIndex];
}
}
}
}
答案 0 :(得分:0)
ArrayIndexOutOfBoundsException很可能发生在clear()方法的赋值中。 您正在从0迭代到pixels.length。 pixels.length是可变大小的(根据传递给构造函数的内容)。迭代时,您可以为tiles [i]指定值。 Tiles是一个固定大小的数组(64 * 64 = 4.096个条目)。如果宽度*高度> 4096,如果clear()方法尝试访问tile [4096]或更高版本,则它将失败。
也许你只想迭代到tiles.length?