Java数组索引超出界限

时间:2010-07-11 05:51:45

标签: java arrays applet

好的,所以我似乎在我的代码的一部分中从Bounds错误中获取了一个数组索引。特别是在第85-102行......

我的代码:http://www.sosos.pastebin.com/f0JQBWui

我只是想让它检查被阻止的瓷砖AHEAD的时间,这样我的精灵不会朝着它不能的方向移动。只有当我在地图的右角或底角时才会发生此异常。

我的GUESS为什么会发生这种错误,因为当我在拐角处时...它会检查瓷砖的右侧和底部是否有...

3 个答案:

答案 0 :(得分:2)

1)您实施阻止(tx,ty)的方式,它只接受法律委员会坐标(0 <= tx&lt; = 12且0&lt; = ty&lt; = 8)。否则,它会检查非法数组位置,从而产生ArrayIndexOutOfBoundsException。你确定这是你的意图吗?我认为将板外瓷砖视为封锁是有道理的。

2)在第85-102行中似乎存在许多错误。我认为你的意思是:

        if (spawnX == 0 || blocked(spawnX - 1, spawnY)) {
            left = false;
            System.out.println("You can't go left!");
        }           
        if (spawnX == 12 || blocked(spawnX + 1, spawnY)) {
            right = false;
            System.out.println("You can't go right!");
        }
        if (spawnY ==0 || blocked(spawnX, spawnY - 1)) {
            up = false;
            System.out.println("You can't go up!");
        }
        if (spawnY == 8 || blocked(spawnX, spawnY + 1)) {
            down = false;
            System.out.println("You can't go down!");
        }

无论如何,如果按照我的建议修正(1),每个方向的额外限制条件是不必要的。

3)isInBound(r,c)实现不正确。由于c上的条件,它总是返回false。

4)代码还有许多其他问题,但我不会详细说明。作为一个原则,尝试使您的设计简单,并确保代码不会重复。

答案 1 :(得分:0)

你必须在你的blocked()函数中做一些边界检查。确保他们给你的坐标确实存在并返回一些“阻塞”值,如果他们不存在。

答案 2 :(得分:0)

在底部或右侧获取错误的描述似乎表明您需要测试该值是否超出数组边界。看看Array.length