【问题标题】:Scanner inside while loopwhile循环内的扫描仪
【发布时间】:2015-04-22 01:50:14
【问题描述】:

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

我正在使用 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;
  }
}

【问题讨论】:

标签: java random while-loop


【解决方案1】:

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

  1. Scanner 的输入分配回numGuess,以便为下一次循环迭代“准备好”值。
  2. if 条件后使用大括号。
  3. 您不必每次都重新声明Scanner 对象。在循环之前执行一次。

之前是 #1 和 #2 的组合导致您的代码失败。仔细查看您的 if 块。如果去掉大括号,则只有 first 行是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;
        }
    }
}

【讨论】:

  • 非常感谢,这解决了很多问题。然而,现在当我第一次输入一个数字时,扫描仪会说例如“猜低!”,下面有一个扫描仪框。我输入另一个数字,而不是注册,它循环回到开头并要求我输入一个数字。有没有什么方法可以做到这一点,只出现 1 个扫描仪框?
  • 尝试将第一行System.out.print从循环内部移动到循环之前,这样它只会执行一次。
  • 它仍然是这个样子...我必须输入两次它才能注册猜猜更高! [DrJava 输入框]7 [DrJava 输入框]7 猜下!
  • 糟糕,抱歉,在我之前的评论中,我的意思是:将循环的前 行移到外面。 :)
  • ahhhhhh... 这更有意义!谢谢你的帮助! :D
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多