我正在研究为什么scan.nextInt()会消耗第二次迭代之前的整数。任何人都可以理解正在发生的事情并解释“扫描仪没有超越任何输入”意味着什么?
请忽略无限循环。它仅用于测试目的。
例:
输入新数据:0
0
输入的数据
再次输入数据:1
执行
输入新数据:1< - 自动输入此值(取自先前输入)
输入的数据
再次输入数据:
while(true)
{
System.out.print("Enter new data: ");
System.out.println(scan.nextInt());
//scan.nextLine(); //must include but I'm not sure why
System.out.println("data entered");
System.out.print("Enter data again: ");
if(scan.hasNextInt())
{
System.out.println("executed");
//scan.nextLine(); //must include this too but not sure why
}
}
答案 0 :(得分:7)
一般模式是:
while(scan.hasNextInt())
{
System.out.println(scan.nextInt());
}
首先你要确保有下一个int,如果有下一个int你用它做什么。你正在以其他方式做到这一点。首先你消耗它,而不是检查是否有另一个,这是错误的。
为什么我们应该在nextXXX之前调用hasNextXXX?因为如果没有这样的下一个令牌,nextXXX可以抛出NoSuchElementException。看看这个例子:
String str = "hello world";
Scanner scan = new Scanner(str);
此字符串中没有整数,表示
System.out.println(scan.nextInt());
将抛出NoSuchElementException。但是如果你使用我写的while循环,你首先检查输入中是否有一个Integer,然后再尝试用它做任何事情。因此,这是标准模式,而不是处理不必要的异常。