扫描仪无法循环工作

时间:2017-04-23 20:31:48

标签: java loops java.util.scanner infinite

经过测试,我发现这个小循环永远不会结束:

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()上尝试过,它运行得很好。谢谢你的回答!

1 个答案:

答案 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
}

希望有所帮助