我不知道为什么这个停止标准会失败,但我认为它与逻辑或(||)有关。我调试了它似乎并没有停在我想要它的位置,当cp(当前位置)位于数组的周边时它就开启了。
if(cp == start || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1)){`
这是一个迷宫解决算法。基本上,迷宫是由X的墙壁组成的2D阵列。每个带X的单元格都是墙,“当前位置”无法访问它。 “当前位置”的任务是走出迷宫,这意味着它必须位于第一列或最后一列或最后一行的第一列。该算法运行良好但只是无法识别当前位置何时位于出口的索引处。
我很抱歉这么模糊,我一直在研究这个问题......
答案 0 :(得分:1)
所以,以下都不是真的:
但你认为(至少)其中一个应该是真的。哪一个?
答案 1 :(得分:0)
存在或陈述,额外的括号集是多余的:
if(cp == start || cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1){
我无法确切地看到你在做什么,但我希望这至少有帮助...
答案 2 :(得分:0)
我真的不知道你在这里要做什么,但猜测'迷宫'是一个二维数组,在最后的比较中应该是maze.length-1
。但是,当cp不在数组的周边时,这会使if语句求值为true
。
答案 3 :(得分:0)
我不确定您是否正确复制了代码
if(cp == start
|| (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1
|| cp.getRow() > 0 || cp.getRow() < maze.length+1)) {
为了简化理解假装maze.length [0] -1评估为3,然后考虑这一点:
cp.getColumn() > 0 || cp.getColumn() < 3
对于cp.getColumn()的每个值都是如此,试试说8,是的,大于0,-99,是的,它小于3.我敢打赌你的意思
cp.getColumn() > 0 && cp.getColumn() < 3
如果列在迷宫中,这将是真的。如果你想在迷宫中进行测试:
cp.getColumn() <= 0 || cp.getColumn() >= 3
(旁注我使用&lt; = 3,而不仅仅是故意= = 3,这涉及移动多个步骤等情况。)
如果你想测试它是否在迷宫中
if(cp == start
|| (
cp.getColumn() > 0 && cp.getColumn() < columnCount
&& cp.getRow() > 0 && cp.getRow() < rowCount)) {
如果你想测试它是否在迷宫之外
if(cp != start
&& (
cp.getColumn() <= 0 || cp.getColumn() >= columnCount
|| cp.getRow() <= 0 || cp.getRow() >= rowCount)) {
答案 4 :(得分:0)
您似乎正在使用OR集中的开始条件。你可能想要放一个! (不)在第一个括号之前。如上所述,我认为else子句将是您应该停止的地方。
考虑将处理代码包装在此if语句中。
桌面检查你的逻辑以确定何时退出。请记住,OR在第一个TRUE处停止处理,而AND在第一个FALSE处停止处理。