Alex
Alex

Reputation: 547

Stuck in a loop when attempting to evaulate a number repeatedly

My Goal: To make a program that can check if the number you guessed is correct. It will tell you if it's too high/low. It needs to continue giving you chances until you guess correctly. Also, it needs to be able to resume from the start after you finish if you want to.

Problem: My if statements are stuck in an infinite loop, and attempting to restart the program at the end does not work at all.

    import java.util.Random;
    import java.util.Scanner;

    public class driver {
        public static void main (String [] args) {
            // Output number of guesses.

            Scanner scan = new Scanner(System.in);
            Random randomGenerator = new Random();

            int randomInt = randomGenerator.nextInt(100) + 1;

            System.out.println(randomInt);

            System.out.println("Welcome to my guessing game. What is your first guess that is between 1 and 100?");
            int userInput = scan.nextInt();

            String playAgain = "Y";
            int guesses = 0;

            System.out.println(randomInt);

            while (playAgain == "Y") {
                if (userInput > 0 && userInput < 100) {
                    if (userInput == randomInt){
                        guesses++;
                        System.out.println ("Right! Guesses: " + guesses);
                        playAgain = "f";
                    }
                    // Too low
                    else if (userInput < randomInt) {
                        guesses++;
                        System.out.println ("Your guess was too LOW.");
                    }
                    // Too high
                    else {
                        System.out.println ("Your guess was too HIGH.");
                        guesses++;
                    }
                }
            }
            // I want to be able to resume from the top if the user says Y.
            System.out.println("Would you like to play again?(Y/N)");
            playAgain = scan.next();
        }
    }

Upvotes: 0

Views: 27

Answers (1)

Knells
Knells

Reputation: 837

The last two lines should be inside your while loop, the problem is with your braces

     while (playAgain == "Y") {
        if (userInput > 0 && userInput < 100) {
            if (userInput == randomInt){
                guesses++;
                System.out.println ("Right! Guesses: " + guesses);
                playAgain = "f";
            }

            else if (userInput < randomInt) {
                guesses++;
                System.out.println ("Your guess was too LOW.");
            }
            else {
                System.out.println ("Your guess was too HIGH.");
                guesses++;
            }
        }
    }
    System.out.println("Would you like to play again?(Y/N)");
    playAgain = scan.next();
}

The bottom part should look like:

                guesses++;
            }
        }
    System.out.println("Would you like to play again?(Y/N)");
    playAgain = scan.next();
    }
}

The way it was means that the condition of your while is never updated. I assume you want it to update after each input from the user.

Upvotes: 1

Related Questions