有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java程序无法识别字符在数组中的位置

我正试图编写一个程序,让一个角色在二维数组中移动,在与之交互的过程中会遇到一些障碍。迷宫看起来是这样的(尽管每次运行时障碍物的位置都会发生变化):

x       |               \   
        /       /           \
                \           
    /       /           \   
\       \       |       |   

x代表玩家,每秒钟,它会向右移动一个空格。如果它与“/”接触,它会向右移动一个空格,向下移动一个空格。如果它与“\”接触,它会向右移动一个空格,向上移动一个空格。如果它接触到一个“|”,它就会自动死亡。然而,程序似乎无法识别玩家的路径中何时存在障碍。它一直在直行,最后看起来是这样的:

x   x   x   x   x   x   x   x
        /       /           \
                \           
    /       /           \   
\       \       |       |   

以下是我应该检查是否存在障碍的代码:

        if (maze[l][f].equals("/")) {
            if ((l-1) < 0) {
                System.out.println("You died on column " + (f + 1));
                System.exit(0);
                y+=1;
            } else {
                l-=1;
                f+=1;
                maze[l][f] = "x";
                y+=1;
            }
        } else if (maze[l][f].equals("\\")) {
            if ((l+1) >= rows){
                System.out.println("You died on column " + (f + 1));
                System.exit(0);
                y+=1;
            } else {
                l+=1;
                f+=1;
                maze[l][f] = "x";
                y+=1;
            }
        } else if (maze[l][f].equals("|")) {
            System.out.println("You died on column" + (f+1));
            System.exit(0);
            y+=1;
        } else {
            f+=1;
            maze[l][f] = "x";
            y+=1;
        }

下面是创建迷宫的代码:

private static int rows;
private static int columns;
public static String[][] maze = new String[5][8];
public String[][] grid() {  
    Random rand = new Random();
    int prob;
    String obstacle = "";
    boolean enabled = true;
    for (int r = 0; r < rows; r++) {
        for (int c = 0; c < columns; c++) {
            if (enabled == true) {
                prob = rand.nextInt(9) + 1;
                if (prob == 1) {obstacle = "|"; enabled = false;}
                else if (prob == 2 || prob == 3) {obstacle = "/"; enabled = false;}
                else if (prob == 4 || prob == 5) {obstacle = "\\"; enabled = false;}
                else {obstacle = ""; enabled = true;}
            }
            else {enabled = true; obstacle = "";}
            maze[r][c] = obstacle;
        }
    }
    return maze;
}

我看不出有什么问题。如果你有任何想法,请告诉我

谢谢


共 (2) 个答案

  1. # 1 楼答案

    更改l和f变量后,将当前位置更改为“x”

    所以现在的位置总是“x”,角色一直向右移动

  2. # 2 楼答案

    假设您当前处于[0,0]位置,使用您在问题中所写的网格: 你有l=0; f=0 该位置是一个空格字符,执行代码并到达最后else部分

    现在,发生了什么f是递增的,这意味着你向右移动,现在站在[0,1]上。然后你在这个新位置上写一个x来标记你的位置

    在下一次执行时,该字符不是预期的空格字符,而是x。再次到达else块,再次向右移动到[0,2]。同样,你用一个x标记你的新位置,覆盖站在那里的|。等等

    你应该做的是:只有当角色不是一个特殊的角色并且在移动到下一个位置之前,才标记你的位置

        if (maze[l][f].equals("/")) {
            if ((l+1) >= rows) {
                System.out.println("You died on column " + (f + 1));
                System.exit(0);
                y+=1;
            } else {
                //maze[l][f] = "x"; // only if you want to replace the '/' char
                l+=1; // to go down, add one (first line has index 0)
                f+=1;
                y+=1;
            }
        } else if (maze[l][f].equals("\\")) {
            if ((l-1) < 0){
                System.out.println("You died on column " + (f + 1));
                System.exit(0);
                y+=1;
            } else {
                maze[l][f] = "x"; // only if you want to replace the '\' char
                l-=1; // to go up, substractone (first line has index 0)
                f+=1;
                y+=1;
            }
        } else if (maze[l][f].equals("|")) {
            System.out.println("You died on column" + (f+1));
            System.exit(0);
            y+=1;
        } else {
            maze[l][f] = "x"; // mark the current position before moving to the next one
            f+=1;
            y+=1;
        }