Drieke
Drieke

Reputation: 301

How can I get a counter to work in a while loop?

so I'm trying to have lets say int Posx; hold a number and then when a user navigates through a menu, depending on what they chose, will either add 1, 0 or -1 to int Posx. I can't get Posx to keep the number after it added or subtracted. I'm trying to navigate through an array and I want to keep 2 ints as markers to let me know where I currently am in the array in regards to x and y.

tl;dr How can I keep a counter inside a do/while loop?

Here is where the problem is:

    //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);

Any ideas, tips, or tricks would be greatly appreciated.

Upvotes: 3

Views: 143

Answers (1)

el_tenedor
el_tenedor

Reputation: 674

I think the problem lies in these two lines

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

You are resetting Posx and Posy every iteration. Try setting them outside your while loop. Like this (you don't want to initialize them over and over again). Same for movx and 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++) {
    ...
    ...

To improve readability of your code you could check out the switch statement and try to loose the multiple continue statements:

    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;
         }

Upvotes: 5

Related Questions