Java 如何使此停止标准有效?

Java 如何使此停止标准有效?,java,if-statement,Java,If Statement,我不知道为什么这个停止标准总是失败,但我相信这与逻辑or(| |)有关。我调试过,它似乎并没有停在我想要的地方,当cp(当前位置)位于阵列的周界时,它就会打开 if(cp == start || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1)){` if(cp==start | | |(cp.getCo

我不知道为什么这个停止标准总是失败,但我相信这与逻辑or(| |)有关。我调试过,它似乎并没有停在我想要的地方,当cp(当前位置)位于阵列的周界时,它就会打开

 if(cp == start || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1)){`
if(cp==start | | |(cp.getColumn()>0 | | cp.getColumn()0 | | cp.getRow()
这是一个迷宫求解算法的例子。基本上,迷宫是一个由X组成的2D数组,用于墙。每个有X的单元都是墙,“当前位置”无法访问它。“当前位置”的任务是走出迷宫,这意味着它必须位于第一列或最后一列或最后一行的第一列。该算法rks非常好,但无法识别当前位置何时位于出口的索引处


我很抱歉说得这么含糊,我已经在这方面工作了这么长时间…

作为一个或多个语句,额外的括号是多余的:

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

我看不清您到底在做什么,但我希望这至少有助于…

对于或语句,额外的括号是多余的:

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

我看不出你到底在做什么,但我希望这至少有帮助…

我看不出你在这里试图做什么,但是猜测“迷宫”是一个二维数组,在最后的比较中它可能是
maze.length-1
。然而,当cp未启用时,这会使if语句的计算结果为
true
数组的周长。

我真的看不出你想在这里做什么,但是猜测“迷宫”是一个二维数组,在最后一次比较中它可能是
maze.length-1
。但是,当cp不在数组周长上时,这会使if语句的计算结果为
true

因此,没有以下是事实:

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

但是你认为(至少)其中一个应该是真的。哪一个是真的?

那么,下面的事情都不是真的:

  • cp==开始
  • cp.getColumn()>0
  • cp.getColumn()
  • cp.getRow()>0
  • cp.getRow()

但是您认为(至少)其中一个应该是正确的。哪一个?

我不确定您是否正确复制了代码

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

为了理解简单,假装迷宫。长度(0)-1计算为3,然后考虑这一点:

cp.getColumn() > 0 || cp.getColumn() < 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
如果列位于迷宫中,则为真。如果要测试迷宫外:

cp.getColumn() <= 0 || cp.getColumn() >= 3 
cp.getColumn()=3

(旁注我使用我不确定您是否正确复制了代码

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

为了理解简单,假装迷宫。长度(0)-1计算为3,然后考虑这一点:

cp.getColumn() > 0 || cp.getColumn() < 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
如果列位于迷宫中,则为真。如果要测试迷宫外:

cp.getColumn() <= 0 || cp.getColumn() >= 3 
cp.getColumn()=3

(旁注我使用似乎您正在使用OR集合中的开始条件。您可能希望在第一个括号前加上!(Not)。如前所述,我认为else子句应该是您停止的位置

考虑在此if语句中包装处理代码


桌面检查您的逻辑以查看何时退出。请记住,OR在第一个TRUE时停止处理,在第一个FALSE时停止处理。

您似乎正在使用OR集合中的启动条件。您可能希望放置!(不是)在第一个括号之前。如前所述,我认为else条款应该是你应该停的地方

考虑在此if语句中包装处理代码


桌面检查您的逻辑以查看何时退出。请记住,或在第一个TRUE时停止处理,在第一个FALSE时停止处理。

这是什么?您可以发布更多代码或其他内容吗?这是什么?您可以发布更多代码或其他内容吗?迷宫的终点在迷宫[1][8]。当当前位置是它应该拒绝继续递归时,因为cp.getColumn()是=迷宫[0]。长度-1,其中长度-1是8。但您询问的是列是否小于8,而不是是否等于8。可能希望
迷宫的终点在迷宫[1][8]。当当前位置是它应该拒绝继续递归时,因为cp.getColumn()是=迷宫[0]。长度-1,其中长度-1是8。但您要问的是列是否小于8,而不是它是否等于8。也许您想要
我想我们不在同一页我误解了您的迷宫[]但是请再读一遍我最后的两条建议,我想他们会给你答案的。我不认为我们在同一页我误解了你的文章。但是请再读一遍我最后的两条建议