通过迷宫式Java中使用的字符数组停止无休止的循环

通过迷宫式Java中使用的字符数组停止无休止的循环,java,arrays,recursion,Java,Arrays,Recursion,好的,我有一个迷宫程序,我已经为课堂创建了。当我使用手动创建的字符数组作为映射时,一切都正常工作,rat四处寻找出口,程序在找到出口时停止。我现在正试图生成一个随机字符数组映射来运行我的迷宫程序,但当我这样做时,它只是无休止地循环尝试并找到结束所需的步骤,尽管我可以在步骤中看到它至少已经到达了应该出口的位置 我注意到,当它第一次到达应该出口的位置时,内存中的地址被打印出来,然后它继续循环。在控制台中看起来是这样的: " 我撞到墙了 我从第(11,9)点回到第(10,9)点 [[C@276af2

好的,我有一个迷宫程序,我已经为课堂创建了。当我使用手动创建的字符数组作为映射时,一切都正常工作,rat四处寻找出口,程序在找到出口时停止。我现在正试图生成一个随机字符数组映射来运行我的迷宫程序,但当我这样做时,它只是无休止地循环尝试并找到结束所需的步骤,尽管我可以在步骤中看到它至少已经到达了应该出口的位置

我注意到,当它第一次到达应该出口的位置时,内存中的地址被打印出来,然后它继续循环。在控制台中看起来是这样的:

" 我撞到墙了

我从第(11,9)点回到第(10,9)点

[[C@276af2

我从第(10,10)点回到第(10,9)点

我在重复我的步骤 "

这就是我用来生成字符数组的方法:

public void randMazeFill(int row, int col){
     Random r = new Random(row-1);
    char[][] map = new char[row][col];
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            if(i == 0 && j > 0 || i > 0 && j ==0 || i == 0 && j == 0 || i == row-1 || j == col-1 
                    ||i == r.nextInt(row-2) || j == r.nextInt(col-2) || i == r.nextInt(row-2) && j == r.nextInt(col-2) ){
                map[i][j] = '1';
            }else if(i == 1 && j == 1){
                map[i][j] = 'B';
            }else if(i == row - 2 && j == col - 2){
                map[i][j] = 'E';
            }
            else 
            map[i][j] = '0';
        }
    }
    for(int a = 0; a < map.length; a++)
        System.arraycopy(map[a], 0, mazeGrid[a], 0, map[a].length);
}
下面是该方法其余部分的基本思想:

if(x < 0 || x > size - 1 || y < 0 || y > size - 1){
        return;
    }

    if(mazeGrid[x][y] == '1'){
        System.out.println("I Hit A Wall");
        return;
    }

    if(mazeGrid[x][y] == footSteps){
        System.out.println("I Am Repeating My Steps");
        return;
    }

    //Recursive Case
    if(mazeGrid[x][y] == 'B'){
        do something
    }else
    mazeGrid[x][y] = footSteps;

    runThrough(x + 1, y); // printout

    runThrough(x, y + 1); // printout

    runThrough(x - 1, y); // printout

    runThrough(x, y - 1); // printout

    mazeGrid[x][y] = 'b'+'t'; //backtracking

我的猜测是,您的方法不会中断任何while(true)循环。当您找到迷宫时,您会打印有关从runThrough方法(而不是从主循环)查找出口和返回的消息。要实现您想要的结果,请在类中使用十合彩布尔标志(例如mazeSolvedFlag),然后尝试以下操作:

if(myMaze[x][y] == 'E'){
    count++;
    myMaze[x][y] = footSteps;
    System.out.println(myMaze);
    mazeSolvedFlag = true;
}
并在中运行代码

while(!mazeSolvedFlag){
   //your code
}
循环

您提供的特定地图可能会起作用,因为在到达出口后,您的老鼠会从三个侧面撞击墙壁,并从最后一个剩余的侧面重复自己的步骤,因此它会因以下情况而结束:

 if(mazeGrid[x][y] == '1'){
    System.out.println("I Hit A Wall");
    return;
}

if(mazeGrid[x][y] == footSteps){
    System.out.println("I Am Repeating My Steps");
    return;
}

您好。让人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,方法是跟踪程序的进度,并将其与预期发生的情况进行比较。一旦这两种情况出现分歧,您就发现了问题。(然后,如果需要,您应该构造。)将代码片段粘贴到使用runThrough方法的位置:什么是足迹以及从何处获得计数?足迹是数据部分中的一个单独字符,用于创建鼠标在网格井中的位置标记,因此非常感谢。我仍然想知道为什么它只使用随机生成的地图而不是手工制作的地图来进行此操作。我想它可能从各个角度撞到了墙上des在到达E后因为撞到墙而逃逸,所以这不是随机生成的问题,而是您选择的这张特定地图的问题。尝试手动生成其他地图并查看结果。哈!现在,通过布尔检查,手动生成的地图正在进行无休止的循环。现在我真的很困惑。没关系,它是循环beca使用我已经更改了我的一张地图,它没有任何出口。再次感谢!
while(!mazeSolvedFlag){
   //your code
}
 if(mazeGrid[x][y] == '1'){
    System.out.println("I Hit A Wall");
    return;
}

if(mazeGrid[x][y] == footSteps){
    System.out.println("I Am Repeating My Steps");
    return;
}