while 循环中的扫描器
Scanner inside 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;
}
}
你快到了。以下是一些建议:
- 将
Scanner
的输入重新分配给 numGuess
以便在下一次循环迭代中获得值 "ready"。
- 在
if
条件后使用大括号。
- 您不必每次都重新声明
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;
但是编译器 "saw" 确实是这样的:
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;
}
}
}
我需要创建一个简单的游戏,其中创建随机数,用户必须通过将数字输入扫描仪来猜测数字。如果他们的猜测太高,系统会告诉他们猜测较低,如果太低则相同。
我正在使用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;
}
}
你快到了。以下是一些建议:
- 将
Scanner
的输入重新分配给numGuess
以便在下一次循环迭代中获得值 "ready"。 - 在
if
条件后使用大括号。 - 您不必每次都重新声明
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;
但是编译器 "saw" 确实是这样的:
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;
}
}
}