如何使此停止标准有效?

时间:2010-11-14 17:20:01

标签: java if-statement

我不知道为什么这个停止标准会失败,但我认为它与逻辑或(||)有关。我调试了它似乎并没有停在我想要它的位置,当cp(当前位置)位于数组的周边时它就开启了。

 if(cp == start || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1)){`

这是一个迷宫解决算法。基本上,迷宫是由X的墙壁组成的2D阵列。每个带X的单元格都是墙,“当前位置”无法访问它。 “当前位置”的任务是走出迷宫,这意味着它必须位于第一列或最后一列或最后一行的第一列。该算法运行良好但只是无法识别当前位置何时位于出口的索引处。

我很抱歉这么模糊,我一直在研究这个问题......

5 个答案:

答案 0 :(得分:1)

所以,以下都不是真的:

  • cp == start
  • cp.getColumn()&gt; 0
  • cp.getColumn()&lt;迷宫[0] .length - 1
  • cp.getRow()&gt; 0
  • cp.getRow()&lt; maze.length + 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处停止处理。