索引意外设置为3040

时间:2013-01-27 02:57:50

标签: java

我正在制作一个游戏,屏幕上会有很多敌人。以下是目前代码的一部分:

private boolean update() {
    pIndex += cSpd;
    if (pIndex > path.length) return true;
    cX = path[pIndex].x;
    cY = path[pIndex].y;
    return false;
}

问题是如果屏幕上有太多的敌人/物体,它会抛出异常。 (我不知道“太多”的确切数量,但我肯定需要超过这个数量。)以下是例外:

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 3040
    at Game$GamePanel$Circle.update(Game.java:152)
    at Game$GamePanel$Circle.access$1(Game.java:149)
    at Game$GamePanel.paintComponent(Game.java:110)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    ...

我明白这意味着什么。第152行是:

cX = path[pIndex].x;

然而,这很令人困惑,因为它前面的行是:

if (pIndex > path.length) return true;

我不明白为什么会这样。 pIndex而另一个变量不是静态的,所以我不知道其他Circle如何影响它。奇怪的是,当它抛出此异常时,索引始终 3040。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

if (pIndex > path.length) return true;

如果pIndex正好是path.length,则不会返回,这会导致异常。

数组索引只能达到数组长度减去1。