JAVA我一直在获取arraynextoutofboundsexception有人可以告诉我为什么?

时间:2014-10-25 16:46:55

标签: java

我似乎无法弄清楚是否有人可以告诉我原因?

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];
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

ArrayIndexOutOfBoundsException很可能发生在clear()方法的赋值中。 您正在从0迭代到pixels.length。 pixels.length是可变大小的(根据传递给构造函数的内容)。迭代时,您可以为tiles [i]指定值。 Tiles是一个固定大小的数组(64 * 64 = 4.096个条目)。如果宽度*高度> 4096,如果clear()方法尝试访问tile [4096]或更高版本,则它将失败。

也许你只想迭代到tiles.length?