检查ArrayIndexOutOfBounds Java

时间:2013-12-14 23:38:00

标签: java multidimensional-array indexoutofboundsexception

我有一个3x3的整数数组(0或1):int[][] matrix。目标是通过假设0是墙壁来通过0和1的迷宫(矩阵)。我不确定如何检查邻居。

例如,从[0][0]开始并在上方检查,我需要执行以下操作:

if (currentPosition.getColumn()-1 != null && !checkIfWall[getRow()][getColumn()-1]) { //do stuff }

其中checkIfWall是布尔的二维墙阵列或非墙壁。问题是如果任何值为-1,checkIfWall将返回ArrayOutOfBounds。另外,我必须在下面,左边和右边写下另外三个if语句,这看起来很乏味。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我这样做的方式是假设数组外的任何位置都是墙 - 所以你可以创建一个函数来进行碰撞测试并检查其中的边界。

 boolean isWall(int x, int y) {
     if (x<0||x>3)
        return true;
     if (y<0||y>3)
        return true;
     return data[x][y]==0;
 }

现在你可以为你喜欢的任何坐标调用isWall,它永远不会出错,所以你不必担心你在所有其他算法中的位置 - 迷宫之外的任何东西总是被视为一个壁。

答案 1 :(得分:0)

首先,我认为你混淆了方向......你认为“向上”为“-1”,但通常在2d数组中发生的是左上角是0,0。随着“y”的增长,它会“向下”。

在任何情况下,关于你的问题,我会通过一种方法简单地获取当前位置和方向(向上,向下,向右,向左,字符串或更好的枚举)来解决这个问题。你应该在你的文件中有一个大小的全局变量,所以你可以验证你是否处于“有效”状态,如果你试图检查数组“外部”的值,它应该返回false(视为一个墙,因为你不能那样走。)

这样做的好处是可以使您的代码可读。例如:if (isValid(this, up)) go up...等等......