简体   繁体   English

在2D数组中搜索字符

[英]Search a 2D array for a character

I am writing a program that is a maze. 我正在编写一个迷宫程序。 The user is denoted by the character 'P', and I need to be able to locate that character in order to assign the values for my move commands. 用户由字符“ P”表示,我需要能够找到该字符才能为我的移动命令分配值。 I am confused as to how to find 'P' in my maze. 我对如何在迷宫中找到“ P”感到困惑。

public static void main(String[] args) throws Exception{

    //Display the maze
    char treasureMaze[][] = {{'P','.','X','X','.'},{'.','X','.','.','.'},{'.','.','.','X','.'},{'X','X','T','.','.'},{'.','.','X','.','.'}}; 
    display(treasureMaze);


    //Give Move Options
    options();

    //Get Users Decision
    Scanner moveChoice = new Scanner(System.in);
    int choice = moveChoice.nextInt();

    if(choice == 1){
        System.out.println("You chose to Move up");
    }
    else if(choice == 2){
        System.out.println("You chose to Move down");
    }
    else if(choice == 3){
        System.out.println("You chose to Move left");
    }
    else if(choice == 4){
        System.out.println("you chose to Move right");
    }
    else{
        return;
    }


    //Move the Player
    //Move Up
    if(choice == 1){
        if(treasureMaze[0-1][0] == '.'){
            treasureMaze[0-1][0] = 'P';
            treasureMaze[0-1][0] = '.';
        }
        else if(treasureMaze[0-1][0] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{
            System.out.println("Cannot move there! Try something else");
        }
    }

    //Move Down
    else if(choice == 2){
        if(treasureMaze[0+1][0] == '.'){
            treasureMaze[0+1][0] = 'P';
            treasureMaze[0][0] = '.';
        }               
        else if(treasureMaze[0+1][0] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{                   
            System.out.println("Cannot move there! Try something else");
            }
            }

    //Move Left
    else if(choice == 3){
        if(treasureMaze[0][0-1] == '.'){
            treasureMaze[0][0-1] = 'P';
            treasureMaze[0][0] = '.';
        }
        else if(treasureMaze[0][0-1] == 'T'){
            System.out.println("Congratulations you won!");
        }
        else{
            System.out.println("Cannot move there! Try something else");
        }
    }

    //Move Right
    else if(choice == 4){
    if(treasureMaze[0][0+1] == '.'){
        treasureMaze[0][0+1] = 'P';
        treasureMaze[0][0] = '.';
    }
    else if(treasureMaze[0][0+1] == 'T'){
        System.out.println("Congratulations you won!");
    }
    else{
        System.out.println("Cannot move there! Try something else");
    }
    }
    else{
        return;
    }
    display(treasureMaze);
    options();
}



//Display Object: prints out the maze for the user
public static void display(char x[][]){
    for(int row = 0; row < x.length; row++){
        for(int column = 0; column < x[row].length; column++){
            System.out.print(x[row][column] + "\t");
        }
        System.out.println();
    }
}

//Options Object: gives the options menu to the user
 static void options(){
     System.out.println("You may:");
        System.out.println("\t1) Move up");
        System.out.println("\t2) Move down");
        System.out.println("\t3) Move left");
        System.out.println("\t4) Move right");
        System.out.println("\t0) Quit");

}

I have it setup to move the 'P' from its start location, but do not know how to locate it for the next run through. 我已将其设置为从其起始位置移动“ P”,但不知道如何为下一次运行找到它。 Any ideas? 有任何想法吗?

I'd suggest keeping track of the current location, so you don't have to find it. 我建议您跟踪当前位置,因此不必找到它。 Declare two variables for the horizontal and vertical position of the player. 为播放器的水平和垂直位置声明两个变量。 Initialize them when you set up the board (looks like they should be (0, 0)) and update them whenever the player moves. 设置板卡时初始化它们(看起来它们应该是(0,0)),并在玩家移动时进行更新。

Ted's answer is probably best for the way your program is currently set up. 泰德(Ted)的答案可能最适合您当前程序的设置方式。

As an alternative, you could replace your 2D array with a tree. 另外,您也可以用树替换2D阵列。 A side benefit of that approach would be that you wouldn't have to worry about the array index going out of bounds. 这种方法的附带好处是您不必担心数组索引超出范围。 Each room would have references to the other rooms it connected to, invalid directions could just be null and you could keep a reference around to the player's current room. 每个房间都将引用与其连接的其他房间,无效的指示可能只是null ,您可以保留对玩家当前房间的引用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM