java - while 循环中的扫描仪

标签 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. Scanner 的输入分配回 numGuess,以便为下一次循环迭代准备好值。
  2. if 条件后使用大括号。
  3. 您不必每次都重新声明Scanner 对象。在循环之前做一次。

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

关于java - while 循环中的扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29786324/

相关文章:

java - Android firebase onStart 和 onStop 解释

java - 检查list中的元素是否是12的倍数

hardware - Spartan-3E 上的随机数生成

r - 创建名称数量不断增加的随机数据框列表

javascript - 直到 localStorage.getItem 为 '1' - Javascript

c++ - cin 到 vector 输入无限循环。为什么?

java - "deck shuffling"程序 : getting unexpected zeroes in results Java 出现问题

java - Java 中的弱引用和垃圾收集

c++ - g++ 和 msvc 中的 std::uniform_int_distribution<int> 范围

python - 无法跳出 while 循环