如何让计数器在while循环中工作?

Dri*_*eke 3 java

所以我试着让我们说int Posx;保持一个数字,然后当用户浏览菜单时,根据他们选择的内容,将添加1,0或-1 int Posx.Posx添加或减去后我无法保留数字.我正在尝试浏览数组,我想保留2个整数作为标记,让我知道我目前在数组中的x和y.

tl; dr如何在do/while循环中保留一个计数器?

这是问题所在:

    //this variable will hold if we found or not the string in the puzzle
    boolean found = true;

    do {    

        //Print out the array
        for (int x = 0; x < maze.length; x++) {
            for (int y = 0; y < maze[0].length; y++) {
                System.out.print(maze[x][y]);
            }
            System.out.println();
        }

        System.out.printf("You may:\n1) Move up\n2) Move down\n3) Move left\n4) Move right\n0) Quit\nYour Choice (0-4):\n");
        int usrAns = sc2.nextInt();

        if (usrAns == 0){
            System.out.println("Bye!\n");
            found = false;
            break;
        }           

        //arrays to hold the direction.
        int[] movx ={ -1,  0, 0, 1};
        int[] movy ={ 0, -1, 1,  0};

        //Array to hold the position. 
        int Posx = 0;
        int Posy = 0;       

        if (usrAns == 1){
            if(check(Posx, Posy, maze, movx[1], movy[1])){
                    System.out.println("Cannot move past cave boundary! Try something else.\n");
                    continue;
                }
                else{
                    Posy = Posy - 1;
                    System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy);
                    continue;
                }
        }
        if (usrAns == 2){
            if(check(Posx, Posy, maze, movx[2], movy[2])){
                    System.out.println("Cannot move past cave boundary! Try something else.\n");
                    continue;
                }
                else{
                    Posy= Posy + 1;
                    System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy);
                    continue;
                }
        }
        if (usrAns == 3){
            if(check(Posx, Posy, maze, movx[0], movy[0])){
                    System.out.println("Cannot move past cave boundary! Try something else.\n");
                    continue;
                }
                else{
                    Posx = Posx - 1;
                    System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy);
                    continue;
                }
        }
        if (usrAns == 4){
            if(check(Posx, Posy, maze, movx[3], movy[3])){
                    System.out.println("Cannot move past cave boundary! Try something else.\n");
                    continue;
                }
                else{
                    Posx =Posx + 1;
                    System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy);
                    continue;
                }
        }
        while (usrAns >= 5 || usrAns < 0){
            System.out.println("Please enter a number between 0 and 4:\n");
            usrAns = sc2.nextInt();
            if (usrAns == 0){
                System.out.println("Bye!\n");
                found = false;
                break;
            }

        }
    }while(found);
Run Code Online (Sandbox Code Playgroud)

任何想法,提示或技巧将不胜感激.

el_*_*dor 5

我认为问题在于这两行

    //Array to hold the position. 
    int Posx = 0;
    int Posy = 0;   
Run Code Online (Sandbox Code Playgroud)

您每次迭代都要重置Posx和Posy.尝试将它们设置在while循环之外.像这样(你不想一遍又一遍地初始化它们).对于movx和movy也是如此:

//arrays to hold the direction.
int[] movx ={ -1,  0, 0, 1};
int[] movy ={ 0, -1, 1,  0};

//Array to hold the position. 
int Posx = 0;
int Posy = 0;       

do {
    //Print out the array
    for (int x = 0; x < maze.length; x++) {
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

为了提高代码的可读性,您可以检查switch语句并尝试删除多个continue语句:

    switch(usrAns) {
        case 1:
            if(check(Posx, Posy, maze, movx[1], movy[1])){
                System.out.println("Cannot move past cave boundary! Try something else.\n");
            }
            else{
                Posy = Posy - 1;
                System.out.printf("This is Posx %d and Posy %d\n", Posx, Posy);
            }
            break;
        case 2:
        ...
        ...
        default:
            while (usrAns >= 5 || usrAns < 0){
                System.out.println("Please enter a number between 0 and 4:\n");
                usrAns = sc2.nextInt();
                if (usrAns == 0){
                    System.out.println("Bye!\n");
                    found = false;
                    break;
                }
            }
            break;
         }
Run Code Online (Sandbox Code Playgroud)