我有一个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语句,这看起来很乏味。有更好的方法吗?
答案 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...
等等......