繁体   English   中英

Java数组索引超出范围

[英]Java Array Index out of Bounds

好的,所以我似乎在部分代码中由于出界错误而得到了数组索引。 特别是第85-102行...

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

我只想让它提前检查阻塞的瓷砖,这样我的精灵就不会朝无法移动的方向移动。 仅当我在地图的右下角时,才会发生此异常。

我的GUESS为什么会发生此错误,如果因为当我在拐角处时..它会检查没有它的向右和向右的瓷砖...

1)您实现blocked(tx,ty)的方式,它只接受合法的板坐标(0 <= tx <= 12和0 <= ty <= 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)代码还有很多其他问题,但我将不赘述。 原则上,请尝试使您的设计简单,并确保代码不会重复。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM