简体   繁体   中英

logical error with random number guessing game

In this program, the computer generates a random number (between 1-100) and the user attempts to guess it. Runs until the user correctly guesses the number. Needs to print out the total number of tries it took before the number was guessed correctly. Program runs fine, but there is a logical error. Nothing prints out when I correctly guess the number; the program just stops instead.

import java.util.*;
public class Problem3 {


  public static void main(String[] args) { 

    Random rand = new Random();
    Scanner console = new Scanner(System.in);

    int num = rand.nextInt(100)+1;
    System.out.println(num); //prints out the random number so I know test works correctly
    int count = 0;
    System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
    console = new Scanner(System.in);
    int guess = console.nextInt();
    while(guess != num){  //while guess is not = to number  
      if(guess < num){             //if less than num
        System.out.println("Your guess is too low"); 
        System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
        guess = console.nextInt();
        count++;
      }else if( guess > num){      //if greater than num   
          System.out.println("Your guess is too high");
          System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
          guess = console.nextInt();
          count++;
      }else{
        count++;
        System.out.println("You guessed correctly after " + count + " tries!");
    }
    }
  }

}

Actually you never enter the else stage, because when the number is guessed, the while code won't execute and therefore the else code will never execute. So after that the number is guessed, so condition is false , exit while loop and System.out.print the Congrats message

Put this outside your while loop "at the end":

 System.out.println("You guessed correctly after " + count + " tries!");

Here's what your code should look like:

while(guess != num){  //while guess is not = to number  
      if(guess < num){             //if less than num
        System.out.println("Your guess is too low"); 
        System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
        guess = console.nextInt();
        count++;
      }else{      //if greater than num   
          System.out.println("Your guess is too high");
          System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
          guess = console.nextInt();
          count++;
      }
    }

  System.out.println("You guessed correctly after " + ++count + " tries!");

Your while loop condition becomes false when the correct number is guessed. This makes the else unreachable.

EDIT

Here is how I would have tackled your problem. If you find yourself repeating code, it usually means there is an opportunity for improvement. Not only is there less code, but it is easier to read and follow what is going on. I'm not trying to steal the answer (@AmirBawab found the issue first), but I am a big believer in not just making code that works, but code that can be maintained and read by others. Hopefully as you continue learning you will keep that in mind. Happy coding!

public static void main(String[] args) {

    Random rand = new Random();
    Scanner console = new Scanner(System.in);

    int num = rand.nextInt(100) + 1;

    int count = 0;

    while (true) {
        System.out.println("Guess the random number. The number is between 1 and 100. Enter it below");
        int guess = console.nextInt();
        count++;
        if (guess < num) {
            System.out.println("Your guess is too low");
        } else if (guess > num) {
            System.out.println("Your guess is too high");
        } else {
            System.out.println("You guessed correctly after " + count + " tries!");
            break;
        }
    }

    console.close();

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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