循环Java扫描器。是否跳过nextInt()?
我编写了一些代码,需要一个int变量来保存0到5之间的值,并编写了一个while循环来验证用户是否输入了一个有效值(0到5),如下所示:
import java.util.Scanner;
public class ZeroToFive {
public static void main(String[] args) {
//some code...
Scanner scanner = new Scanner (System.in);
int someNumber = -1;
while(someNumber < 0 || someNumber > 5)
System.out.println("Enter a number from 0 to 5");
someNumber=scanner.nextInt();
if(someNumber < 0 || someNumber > 5){
System.out.println("Invalid data. You must enter a number from 0 to 5. Try again.");
}
// some code that needs someNumber to be a number from 0 to 5...
}
}
计划是使用用户输入更新someNumber变量,但循环会继续运行,而不会停止读取nextInt()
输出: 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 ... (永远)
为什么循环不停止从用户处读取nextInt()
# 1 楼答案
因此,基本上条件
while(someNumber < 0 || someNumber > 5)
总是正确的,因为您使用值-1启动了变量“someNumber”。您要做的是在while
指令中使用分号同时包含System.out.println("Enter a number from 0 to 5");
和someNumber=scanner.nextInt();
,以便让someNumber变量更改其值代码应该如下所示:
# 2 楼答案
问题是因为
while
循环缺少{...}
应该是的
由于缺少括号,只有以下语句
在
while
循环的范围内# 3 楼答案
如果没有在循环后指定{},则只会执行下面的第一行代码(在本例中是System.out.println(“输入0到5之间的数字”)。要执行代码块,需要在while(someNumber<;0 | | someNumber>;5)之后指定{}