为什么在下面的代码中,您能够连续在扫描仪中输入数字?我觉得代码会在输入double时导致无限循环,因为
userInput.hasNextDouble()
总是如此,因为userInput的值在整个循环中都不会改变。
我想解释为什么while条件不会导致无限循环。
public class Testing
{
public static void main(String[] args)
{
System.out.println("Enter numbers: ");
Scanner userInput = new Scanner(System.in);
int currentSize = 0;
while (userInput.hasNextDouble())
{
double nextScore = userInput.nextDouble();
currentSize++;
}
System.out.println(currentSize);
}
}
答案 0 :(得分:1)
扫描仪类基本上扫描在输入到输入流中的标记。当您调用hasNextDouble()
或任何hasNext
方法时,它将尝试查看流中的下一个标记。在返回值之前它会等到令牌存在,然后调用nextDouble()
将获取该令牌并从流中清除它,这样当你回到hasNextDouble()
时它会等到你输入另一个token
{1}}进入流。
答案 1 :(得分:0)
hasNextDouble()
是一种指示是否已输入双精度的方法。如果在该代码中,用户输入的不是双精度内容,例如char
或boolean
,则代码将跳出循环并打印currentSize
。更好的事情是这样的:
System.out.println("Enter numbers: ");
Scanner userInput = new Scanner(System.in);
int currentSize = 0;
char choice = 'c';
while (choice != 't')
{
double nextScore = userInput.nextDouble();
currentSize++;
System.out.println("Enter \"c\" to enter more numbers, or \"t\" to exit.");
choice = userInput.nextChar();
}
System.out.println(currentSize);
}
答案 2 :(得分:0)
来自Scanner
的javadocnext()和hasNext()方法及其原始类型的伴随方法(例如nextInt()和hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 hasNext和next方法都可能阻止等待进一步输入。 hasNext方法块是否与其关联的下一个方法是否将阻止无关。
因此,如果你没有输入一个双精度数,你就会立即退出那个循环。