日期:2014-05-20 浏览次数:20767 次
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("完成");
------解决方案--------------------
呃,楼主,我现在终于理解你的需求了,但我不得不说你这是一个矛盾
你需要用户按两个回车,又不允许他一次按两个回车……
问题是没有办法从输入流(system.in)中简单的知道这两个回车是何时按下的。
可能你理所当然地认为程序的执行顺序是这样的:
打印提示->等待输入->输入两个回车->打印提示->等待输入(直接跳过了)->结束
但实际上这种情况非常不可能,一般的顺序是这样的
打印提示->等待输入->输入回车->打印提示->等待输入->输入回车->结束
原因是电脑执行速度非常快,哪怕两个回车之间的间隔只有0.01秒,对程序来说,中间的时间也足够打印第二个提示了(你调试在中间打断点的话是另一回事)
不知道楼主明白了没,即使你第一次读取后把System.in清空了,仍然不能避免这种情况,因为那时候System.in原本就已经空了,第二次输入在0.01秒以后才会到达
------解决方案--------------------
没啥好办法,自己写个scanner,处理InputStream吧。这个总是能实现的。
Scanner内置有缓冲,很麻烦。