簡體   English   中英

如果else語句未檢查所有else語句

[英]If else statement not checking all the else statements

因此,我正在編寫一個程序,它將遞歸解決迷宮,並且我的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!='*'。 因此,如果語句應該發生,但事實並非如此。 我放入一堆println語句來檢查它在哪里斷開並且isFInished == 0,所以它開始進入if語句,但是出了點問題,找不到任何解決方案,因此調用了errorChoice。 我是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) {

那應該做。


如果您更經常查看此類雜草叢生:

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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM