现在有一个问题System.out.print("第一步 按回车键继续:");
scanner.readLine();System.out.print("第二步 按回车键继续:");
scanner.readLine();System.out.println("完成");
如果在第一步时候按了两下回车键,则第二步就自动跳过了。请问我在第一步和第二步之间,如何把System.in清空?
scanner.readLine();System.out.print("第二步 按回车键继续:");
scanner.readLine();System.out.println("完成");
如果在第一步时候按了两下回车键,则第二步就自动跳过了。请问我在第一步和第二步之间,如何把System.in清空?
第二个线程里面的Scanner scan = new Scanner(System.in);还是操作系统的System.in.第一步多出来的那个回车还在里面呢,等着来取...
要避免这种情况,判断一下第二个readLine()读取的不为空就行了 Scanner scanner = new Scanner(System.in);
System.out.print("第一步 按回车键继续:");
scanner.nextLine(); System.out.print("第二步 按回车键继续:");
String l = "";
do {
l = scanner.nextLine();
} while (l.length() == 0); System.out.println("完成");
还是有问题,我在第二步必须输入字符才能跳出:
do {
l = scanner.nextLine();
} while (l.length() == 0);
的循环。我是想在第二步也是直接按回车跳出。
你需要用户按两个回车,又不允许他一次按两个回车……
问题是没有办法从输入流(system.in)中简单的知道这两个回车是何时按下的。
可能你理所当然地认为程序的执行顺序是这样的:
打印提示->等待输入->输入两个回车->打印提示->等待输入(直接跳过了)->结束
但实际上这种情况非常不可能,一般的顺序是这样的
打印提示->等待输入->输入回车->打印提示->等待输入->输入回车->结束
原因是电脑执行速度非常快,哪怕两个回车之间的间隔只有0.01秒,对程序来说,中间的时间也足够打印第二个提示了(你调试在中间打断点的话是另一回事)不知道楼主明白了没,即使你第一次读取后把System.in清空了,仍然不能避免这种情况,因为那时候System.in原本就已经空了,第二次输入在0.01秒以后才会到达