Java If-else语句未检查所有else语句

Java If-else语句未检查所有else语句,java,if-statement,recursion,maze,Java,If Statement,Recursion,Maze,所以我在做一个程序,这个程序会递归地解决一个迷宫,我的大脑有问题 if-else语句。我在代码的不同部分遇到了一个类似的问题,我只需去掉所有其他部分并使用一堆if语句就可以解决这个问题。但现在我需要它,在它找到正确的方向后停止搜索 public static void solveMaze(int ROW, int COL){ int isFinished = 0; //ROW COL //set up base case. find end if possible to get

所以我在做一个程序,这个程序会递归地解决一个迷宫,我的大脑有问题 if-else语句。我在代码的不同部分遇到了一个类似的问题,我只需去掉所有其他部分并使用一堆if语句就可以解决这个问题。但现在我需要它,在它找到正确的方向后停止搜索

public static void solveMaze(int ROW, int COL){
   int isFinished = 0;
   //ROW COL
   //set up base case. find end if possible to get in 1 move then end

         if(drawArray[ROW][COL+1] == ' '){
            if(drawArray[ROW][COL+2] == 'E'){
               isFinished = 1;
               move(ROW,COL,ROW,COL+2);
            }
         }
         if(drawArray[ROW][COL-1] == ' '){
            if(drawArray[ROW][COL-2] == 'E'){
               isFinished = 1;
               move(ROW,COL,ROW,COL-2);
            }
         }
         if(drawArray[ROW+1][COL] == ' '){
            if(drawArray[ROW+2][COL] == 'E'){
               isFinished = 1;
               move(ROW,COL,ROW+2,COL);
            }
         }
         if(drawArray[ROW-1][COL] == ' '){
            if(drawArray[ROW-2][COL] == 'E'){
               isFinished = 1;
               move(ROW,COL,ROW-2,COL);
            }
         }      
         //find first open cell and choose it
         int foundOpen = 0;
         if(isFinished == 0){
            if(drawArray[ROW][COL+1] == ' ' && drawArray[ROW][COL+2] != '*'){
               drawArray[ROW][COL+2] = '*';
               prevCol = COL;
               prevRow = ROW;
               COL+= 2;
               foundOpen = 1;   
            }  
            else if(drawArray[ROW+1][COL] == ' ' && drawArray[ROW+2][COL] != '*'){          
               drawArray[ROW+2][COL] = '*';
               prevCol = COL;
               prevRow = ROW;
               ROW+= 2;
               foundOpen = 1;
            }
            else if(drawArray[ROW][COL-1] == ' ' && drawArray[ROW][COL-2] != '*'){
               drawArray[ROW][COL-2] = '*';
               prevCol = COL;
               prevRow = ROW;
               ROW-= 2;
               foundOpen = 1;
            }
            else if(drawArray[ROW-1][COL] == ' ' && drawArray[ROW-2][COL] != '*'){
               drawArray[ROW-2][COL] = '*';
               prevCol = COL;
               prevRow = ROW;
               ROW-= 2;
               foundOpen = 1;

            }
         }
         //i have two recursive voids so this is chosing between them

         if(foundOpen == 1){
            move(prevRow,prevCol,ROW,COL);
            solveMaze(ROW,COL);}
         else if (foundOpen == 0 && isFinished == 0)
            wrongChoice(ROW, COL);

   }

所以基本上,程序的这一部分首先检查是否接近结束,是否基本完成。我以前在第一部分有if-else语句,但是我不工作,我唯一能修复它的方法就是去掉else语句。因此,在一个迷宫中,我必须解决的第一步应该是COL-1==''和COL-2!='*'。所以if语句应该发生,但它没有发生。我放入了一组println语句来检查它在哪里运行,isFInished==0,这样它就开始进入if语句,但随后出现了一些问题,没有找到任何解决方案,所以调用了错误的选择。我对java和递归还很陌生,所以我可能遗漏了一些显而易见的东西。

你可以System.out.print并检查你想让它停止的地方,然后使用@mserioli建议,这将有效。祝你好运

     boolean isFinished = true;
     if (drawArray[ROW][COL+1] == ' ' && drawArray[ROW][COL+2] == 'E') {
         move(ROW,COL,ROW,COL+2);
     } else if (drawArray[ROW][COL-1] == ' ' && drawArray[ROW][COL-2] == 'E') {
         move(ROW,COL,ROW,COL-2);
     } else if (drawArray[ROW+1][COL] == ' ' && drawArray[ROW+2][COL] == 'E') {
         move(ROW,COL,ROW+2,COL);
     } else if (drawArray[ROW-1][COL] == ' ' && drawArray[ROW-2][COL] == 'E') {
         move(ROW,COL,ROW-2,COL);
     } else {
         isFinished = false;
     }

     int foundOpen = 0;
     if (!isFinished) {
这样就可以了


如果你更频繁地观察Naybor:

static final int[][] naybors = {
    { 0, 1 },
    { 0, -1 },
    { 1, 0 },
    { -1, 0 },
};

boolean isFinished = false;
for (int[] nb : naybors) {
    if (drawArray[ROW + nb[0]][COL + nb[1]] == ' '
            && drawArray[ROW + 2*nb[0]][COL + 2*nb[1]] == 'E') {
        move(ROW, COL, ROW + 2*nb[0], COL + 2*nb[1);
        isFinished = true;
        break;
    }
}

还看到:

        else if(drawArray[ROW][COL-1] == ' ' && drawArray[ROW][COL-2] != '*'){
           drawArray[ROW][COL-2] = '*';
           prevCol = COL;
           prevRow = ROW;
           //Wrong: ROW-= 2;
           COL -= 2; // Good?
           foundOpen = 1;
        }

如果你所需要的是:在找到正确的方法后停止搜索,为什么不简单地使用return?你确定“If-else”阶梯中的四个条件是详尽的吗?使用调试器并逐步完成这不是一个答案这是一个建议,帮助op了解并能够自己调试某些东西我拿出了所有的System.out.prints。他们向我展示了我在if声明中,但没有其他任何东西我肯定会使用这两个建议。虽然这些部分在我的程序中工作,但我遇到问题的部分是第二组if语句。在第二部分中也看到了一些东西,请参阅答案的补充。