如何在Java控制台上更新输出?(右侧规则迷宫解算器)

如何在Java控制台上更新输出?(右侧规则迷宫解算器),java,recursion,maze,Java,Recursion,Maze,我试着用右手法则解迷宫,我的算法对我来说很好。 不过我的代码有点问题。 我想在控制台上更新我的输出,但我真的不知道怎么做。 我有一种感觉,我必须使用Thread.sleep,但我不知道该把它放在哪里,这样它就可以不断更新我的控制台,而不用每次移动都打印出全新的迷宫 我想让用户可以看到X的当前位置,我想没有尾随的X。 仅仅用文字解释有点困难,所以我制作了一张gif图片 这是我的密码。谢谢大家回答我的问题!祝你们今天过得愉快 public class MazeTraversalGradedProg

我试着用右手法则解迷宫,我的算法对我来说很好。 不过我的代码有点问题。 我想在控制台上更新我的输出,但我真的不知道怎么做。 我有一种感觉,我必须使用
Thread.sleep
,但我不知道该把它放在哪里,这样它就可以不断更新我的控制台,而不用每次移动都打印出全新的迷宫

我想让用户可以看到X的当前位置,我想没有尾随的X。 仅仅用文字解释有点困难,所以我制作了一张gif图片

这是我的密码。谢谢大家回答我的问题!祝你们今天过得愉快

public class MazeTraversalGradedProgram {
    private static int row, column, count;
    private static String direction = "right";

private static char maze1 [] [] = {
    {'#','#','#','#','#','#','#','#','#','#','#','#'},
    {'#','.','.','.','#','.','.','.','.','.','.','#'},
    {'.','.','#','.','#','.','#','#','#','#','.','#'},
    {'#','#','#','.','#','.','.','.','.','#','.','#'},
    {'#','.','.','.','.','#','#','#','.','#','.','.'},
    {'#','#','#','#','.','#','.','#','.','#','.','#'},
    {'#','.','.','#','.','#','.','#','.','#','.','#'},
    {'#','#','.','#','.','#','.','#','.','#','.','#'},
    {'#','.','.','.','.','.','.','.','.','#','.','#'},
    {'#','#','#','#','#','#','.','#','#','#','.','#'},
    {'#','.','.','.','.','.','.','#','.','.','.','#'},
    {'#','#','#','#','#','#','#','#','#','#','#','#'}};

private static char maze2 [] [] = {
    {'#','#','#','#','#','#','#','#','#','#','#','#'},
    {'#','.','.','.','.','.','#','.','.','.','.','#'},
    {'#','.','#','.','#','.','#','#','#','#','.','#'},
    {'#','#','#','.','#','.','.','.','.','#','.','#'},
    {'#','.','.','.','.','#','#','#','.','#','.','#'},
    {'#','#','#','#','.','#','.','#','.','#','.','#'},
    {'#','.','.','#','.','#','.','#','.','#','.','.'},
    {'#','#','#','#','.','#','.','#','.','#','.','#'},
    {'#','.','.','.','.','#','.','.','.','#','.','#'},
    {'#','.','#','#','#','#','#','#','.','#','.','#'},
    {'.','.','#','.','.','.','.','#','.','.','.','#'},
    {'#','#','#','#','#','#','#','#','#','#','#','#'}};

private static void printMaze (char [] [] maze) {
    for (int i = 0; i<maze.length; i++) {
        for(int j = 0; j<maze[i].length; j++) {
            System.out.print(maze [i][j] + " ");
        }
        System.out.println();
    }
    System.out.println();
    System.out.println();
}

private static void goForward (char [] [] maze){
    if (direction == "right") {
        column++;
        maze[row][column] = 'X';
    } else if (direction == "up") { // array[xnd row --- ][ynd column | ]
        row--;
        maze[row][column] = 'X';
    } else if (direction == "left") {
        column--;
        maze[row][column] = 'X';
    } else if (direction == "down") {
        row++;
        maze[row][column] = 'X';
    }
}
private static boolean wallOnRight (char [] [] maze) {
    if (direction == "right" && maze[row+1][column] == '#') {
        return true;
    }
    else if (direction == "up" && maze[row][column+1] == '#') {
        return true;
    }
    else if (direction == "left" && maze[row-1][column] == '#') {
        return true;
    }
    else if (direction == "down" && maze[row][column-1] == '#') {
        return true;
    }
    return false;
}

private static boolean wallOnFront (char [] [] maze) {
    if (direction == "right" && maze[row][column+1] == '#') {
        return true;
    }
    else if (direction == "up" && maze[row-1][column] == '#') {
        return true;
    }
    else if (direction == "left" && maze[row][column-1] == '#') {
        return true;
    }
    else if (direction == "down" && maze[row+1][column] == '#') {
        return true;
    }
    return false;
}

private static void traverseMaze (char [] [] maze){

    if (count == 0) {
        for (int i = 0; i < 12; i++) {
            if (maze[i][0] == '.'){                 // array[xnd row --- ][ynd column | ]
                maze[i][0] = 'X';
                row = i; column = 0;
            }
        }
        count++;
    }

    if (wallOnRight(maze) && !wallOnFront(maze)) {
        goForward(maze);
    } else if (wallOnRight(maze) && wallOnFront(maze)) {
        if (direction == "right") {
            direction = "up";
        } else if (direction == "up") {
            direction = "left";
        } else if (direction == "left") {
            direction = "down";
        } else if (direction == "down") {
            direction = "right";
        }
    } else if (!wallOnRight(maze)) {
        if (direction == "right") {
            direction = "down";
        } else if (direction == "up") {
            direction = "right";
        } else if (direction == "left") {
            direction = "up";
        } else if (direction == "down") {
            direction = "left";
        }
        goForward(maze);
    }

    if (column == 11) {
        count = 0 ;
    } else {
        traverseMaze(maze);
    }


}

public static void main (String [] args){
    printMaze(maze1);
    traverseMaze(maze1);
    printMaze(maze2);
    traverseMaze(maze2);
}

}
公共类MazeTraversalGradedProgram{
私有静态int行、列、计数;
私有静态字符串direction=“right”;
专用静态字符maze1[][]={
{'#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','.','.','.','#','.','.','.','.','.','.','#'},
{'.','.','#','.','#','.','#','#','#','#','.','#'},
{'#','#','#','.','#','.','.','.','.','#','.','#'},
{'#','.','.','.','.','#','#','#','.','#','.','.'},
{'#','#','#','#','.','#','.','#','.','#','.','#'},
{'#','.','.','#','.','#','.','#','.','#','.','#'},
{'#','#','.','#','.','#','.','#','.','#','.','#'},
{'#','.','.','.','.','.','.','.','.','#','.','#'},
{'#','#','#','#','#','#','.','#','#','#','.','#'},
{'#','.','.','.','.','.','.','#','.','.','.','#'},
{'#','#','#','#','#','#','#','#','#','#','#','#'}};
专用静态字符maze2[][]={
{'#','#','#','#','#','#','#','#','#','#','#','#'},
{'#','.','.','.','.','.','#','.','.','.','.','#'},
{'#','.','#','.','#','.','#','#','#','#','.','#'},
{'#','#','#','.','#','.','.','.','.','#','.','#'},
{'#','.','.','.','.','#','#','#','.','#','.','#'},
{'#','#','#','#','.','#','.','#','.','#','.','#'},
{'#','.','.','#','.','#','.','#','.','#','.','.'},
{'#','#','#','#','.','#','.','#','.','#','.','#'},
{'#','.','.','.','.','#','.','.','.','#','.','#'},
{'#','.','#','#','#','#','#','#','.','#','.','#'},
{'.','.','#','.','.','.','.','#','.','.','.','#'},
{'#','#','#','#','#','#','#','#','#','#','#','#'}};
私有静态void打印迷宫(char[][]迷宫){

对于(int i=0;iYou无法更新控制台。您需要某种类型的GUI来实现此目的。@PM77-1我的意思是,不断更新输出,如我的GIF图片。我可以找到一些使用
Thread.sleep
命令和while循环或for循环更新输出的情况,但我确实找不到任何使用2D数组的情况。感谢您的合作mment!您无法在支持Java的每个平台上可靠地执行此操作。这完全取决于解释代码和生成输出的内容。您可以使用一些库和命令在控制台中移动光标……但同样,这些库和命令取决于Java运行的环境。如前所述从@JoshuaChang开始,您无法用Java清理控制台,但您可以在每次输入后重新绘制整个屏幕,请看,您无法更新控制台。您需要某种类型的GUI来实现这一点。@PM77-1我的意思是,不断更新输出,如我的GIF图片。我可以找到一些使用
Thread.sleep 命令和while循环或for循环,但我真的找不到任何2D数组。感谢您的评论!您无法在支持Java的每个平台上可靠地执行此操作。这完全取决于解释代码和生成输出的内容。您可以使用一些库和命令来移动光标在控制台中运行…但是,这些都取决于Java运行的环境。正如@JoshuaChang中提到的,您不能用Java清理控制台,但您可以在每次输入后重新绘制整个屏幕,请参阅