循环中的扫描仪

时间:2015-04-22 01:50:14

标签: java random while-loop

我需要创建一个简单的游戏,其中创建一个随机数,用户必须通过在扫描仪中输入数字来猜测数字。如果他们的猜测太高,系统会告诉他们猜测较低,如果它太低则相同。

我正在使用while循环,但我不知道如何连续调用扫描程序以便用户可以继续猜测。到目前为止,这是我的代码:

public static void highLow()
{
  Random randomGenerator = new Random();
  int num = randomGenerator.nextInt(100);
  boolean loop = true;

  while(loop)
  {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Please enter a number: ");
    int numGuess  = scanner.nextInt();
        if (numGuess > num)
          System.out.println("Guess lower!");
          scanner.nextInt();

        if (numGuess < num)
          System.out.println("Guess higher!");
          scanner.nextInt();

        if (numGuess == num)
          System.out.println("Correct! You win!!!");
          loop = false;
  }
}

1 个答案:

答案 0 :(得分:1)

你快到了。以下是一些建议:

  1. Scanner的输入分配回numGuess,以便为下一次循环迭代提供“就绪”值。
  2. if条件之后使用大括号。
  3. 您不必每次都重新声明Scanner个对象。在循环之前做一次。
  4. #1和#2的组合导致您的代码失败。仔细查看if块。如果您不再使用大括号,则只有第一个行才能成为if的一部分。 (见Is it ok if I omit curly braces in Java?

    所以,你的意思是:

    if (numGuess == num)
        System.out.println("Correct! You win!!!");
        loop = false;
    

    但编译器“看到”的确如此:

    if (numGuess == num)
        System.out.println("Correct! You win!!!");
    loop = false;
    

    错位的loop = false将确保您的循环只运行一次,无论用户输入什么。明确包括括号使它明确无误!

    以下是进行上述更改后代码的外观:

    public static void highLow()
    {
        Random randomGenerator = new Random();
        int num = randomGenerator.nextInt(100);
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        int numGuess = 0;
    
        while(loop)
        {
            System.out.print("Please enter a number: ");
            numGuess  = scanner.nextInt();
            if (numGuess > num) {
                System.out.println("Guess lower!");
                numGuess  = scanner.nextInt();
            } else if (numGuess < num) {
                System.out.println("Guess higher!");
                numGuess  = scanner.nextInt();
            } else if (numGuess == num) {
                System.out.println("Correct! You win!!!");
                loop = false;
            }
        }
    }