经过测试,我发现这个小循环永远不会结束:
Scanner scanner = new Scanner(System.in);
int c = 1; // initialize variable
// and then
while(c != 0){ // as long as its not 0
System.out.println("Enter a number: ");
c = scanner.nextInt(); // ask for a new value
}
这个循环发生在一个简单的程序中,我要求用户输入数字,存储它们,当他输入' 0时,它返回所有数字的总和。 (我将存储代码分开,与问题无关)
这个循环根本就没有结束,事实上,我甚至无法输入数字。
编辑:显然,在测试时运行此循环不起作用。我在main()上尝试过,它运行得很好。谢谢你的回答!
答案 0 :(得分:2)
扫描仪有一个缓冲区,这个缓冲区是先进先出的,这意味着如果你想输入20
,你必须按 2 0 大骨节病>。在 2 和 0 之间是一个小暂停,扫描仪不知道每当有更多数字跟随时(你可能想要输入205
,所以他在等待下一个号码)。
要识别号码的结尾,扫描仪正在等待某个不是数字的字符。 Enter 是一个无数字,表示您希望使用nextInt
读取的数字的结尾。不幸的是, Enter 也是可以阅读的String
。
如果输入 2 0 输入,20
是数字的一部分,但输入是String的一部分,但仍然在缓冲区中 。所以在20
缓冲区包含 Enter 之后,这不是一个数字。因为这不是一个数字,所以第二个readInt
永远等待!
您可以做的是刷新缓冲区以清除不需要的 Enter 。
示例:
int c = 1; // initialize variable
// and then
while(c != 0){ // as long as its not 0
Scanner scanner = new Scanner(System.in);// construct without buffer
System.out.println("Enter a number: ");
c = scanner.nextInt(); // ask for a new value
}
希望有所帮助