Brianna C
Brianna C

Reputation: 11

While loop output

The program will generate the correct output for the first number guess but after the user inputs the second guess, there is no output at all. Please help! THANKS

    final int number = (int)((Math.random()*99)+1);
    int counter = 0;
    System.out.print("Enter a guess between 1 and 100: ");
    while (keyboard.nextInt() > number) {
        System.out.println("Your guess was too high. Try again.");
        counter++;
        System.out.print("Enter a guess between 1 and 100: ");
    }
    while (keyboard.nextInt() < number) {
        System.out.println("Your guess was too low. Try again.");
        counter++;
        System.out.print("Enter a guess between 1 and 100: ");
    }
    while (keyboard.nextInt() == number) {
        System.out.println("Congratulations! Your guess was correct!");
        counter++;
        System.out.println("I had chosen " + number + " as the target number.");
        System.out.println("You guessed it in " + counter + " tries.");
        if (counter == 1) {
            System.out.println("That was lucky!");
        }
        if (counter >= 2 || counter <= 4) {
            System.out.println("That was amazing!");
        }
        if (counter == 5 || counter == 6) {
            System.out.println("That was good.");
        }
        if (counter == 7) {
            System.out.println("That was OK.");
        }
        if (counter == 8 || counter == 9) {
            System.out.println("That was not very good.");
        }
        if (counter >= 10) {
            System.out.println("This just isn't your game.");
        }

Upvotes: 1

Views: 256

Answers (5)

cvsr.sarma
cvsr.sarma

Reputation: 909

while(someCondition)
{

    if (keyboard.nextInt() > number) {

        ...

    } else if(keyboard.nextInt() < number) {

        ...

    } else {

        ...

    }

}

Upvotes: 0

Luca Mastrostefano
Luca Mastrostefano

Reputation: 3281

There is some problem in how you use the while statement.

Here you can find the correct version of your code:

public static void main(final String[] args) {
    final Scanner keyboard = new Scanner(System.in);
    final int number = (int) ((Math.random() * 99) + 1);
    int counter = 0;
    System.out.print("Enter a guess between 1 and 100: ");
    int user_number;
    do {
        user_number = keyboard.nextInt();
        if (user_number > number) {
            System.out.println("Your guess was too high. Try again.");
            System.out.print("Enter a guess between 1 and 100: ");
            counter++;
        } else if (user_number < number) {
            System.out.println("Your guess was too low. Try again.");
            System.out.print("Enter a guess between 1 and 100: ");
            counter++;
        }
    } while (user_number != number);
    System.out.println("Congratulations! Your guess was correct!");
    counter++;
    System.out.println("I had chosen " + number + " as the target number.");
    System.out.println("You guessed it in " + counter + " tries.");
    if (counter == 1) {
        System.out.println("That was lucky!");
    }
    if ((counter >= 2) || (counter <= 4)) {
        System.out.println("That was amazing!");
    }
    if ((counter == 5) || (counter == 6)) {
        System.out.println("That was good.");
    }
    if (counter == 7) {
        System.out.println("That was OK.");
    }
    if ((counter == 8) || (counter == 9)) {
        System.out.println("That was not very good.");
    }
    if (counter >= 10) {
        System.out.println("This just isn't your game.");
    }
}

Upvotes: 0

you really need to change your design pattern.

Once you fail to satisfy the conditions in 1 of those while loops, you code will never go back.

you should only have 1 while loop for the guessing phase. you code should look like this

while(someCondition)
{  
    int num = keyboard.nextInt()
    if (num  > number) {   
        ...      
    }
    else if (num  < number) {  
        ...
    }
    else if (num  == number) {
        ...
    }
}

Upvotes: 3

Bohemian
Bohemian

Reputation: 425378

  • Your while loops should be if statements.
  • There should be a while loop around (practically) all your code

You code should roughly look like:

while(true) {
    // prompt for input
    // read input
    // break from loop if input is the exit input, eg -1
    // check input - essentially change your whiles to ifs
}

Upvotes: 2

Thomas
Thomas

Reputation: 88757

This block doesn't seem to work as intended:

while (keyboard.nextInt() > number) {
    System.out.println("Your guess was too high. Try again.");
    counter++;
    System.out.print("Enter a guess between 1 and 100: ");
}
while (keyboard.nextInt() < number) {
    System.out.println("Your guess was too low. Try again.");
    counter++;
    System.out.print("Enter a guess between 1 and 100: ");
}

Assume the user enters -1 and then 101. You'll end up in the next loop. Thus you might want to change it to something like this:

boolean retry = true;
while ( retry ) {
    counter++;
    int n = keyboard.nextInt();
    if( n > number ) {
      System.out.println("Your guess was too high. Try again.");
    }
    else if( n < number ) {
      System.out.println("Your guess was too low. Try again.");
    }
    else {
      //number found
      retry = false;
    }

    if( retry ) {
        System.out.prnt("Enter a guess between 1 and 100: ");
    } 
}

Upvotes: 0

Related Questions