Java If-else语句未检查所有else语句
所以我在做一个程序,这个程序会递归地解决一个迷宫,我的大脑有问题 if-else语句。我在代码的不同部分遇到了一个类似的问题,我只需去掉所有其他部分并使用一堆if语句就可以解决这个问题。但现在我需要它,在它找到正确的方向后停止搜索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
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语句。在第二部分中也看到了一些东西,请参阅答案的补充。