现在有一个问题System.out.print("第一步 按回车键继续:");
scanner.readLine();System.out.print("第二步 按回车键继续:");
scanner.readLine();System.out.println("完成");
如果在第一步时候按了两下回车键,则第二步就自动跳过了。请问我在第一步和第二步之间,如何把System.in清空?

解决方案 »

  1.   

    试了一下,还是不行。
    第二个线程里面的Scanner scan = new Scanner(System.in);还是操作系统的System.in.第一步多出来的那个回车还在里面呢,等着来取...
      

  2.   

    按了两次回车,相当于输入了两行,你的两个readLine()当然就都过了
    要避免这种情况,判断一下第二个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("完成");
      

  3.   


    还是有问题,我在第二步必须输入字符才能跳出:
            do {
                l = scanner.nextLine();
            } while (l.length() == 0);
    的循环。我是想在第二步也是直接按回车跳出。
      

  4.   

    呃,楼主,我现在终于理解你的需求了,但我不得不说你这是一个矛盾
    你需要用户按两个回车,又不允许他一次按两个回车……
    问题是没有办法从输入流(system.in)中简单的知道这两个回车是何时按下的。
    可能你理所当然地认为程序的执行顺序是这样的:
    打印提示->等待输入->输入两个回车->打印提示->等待输入(直接跳过了)->结束
    但实际上这种情况非常不可能,一般的顺序是这样的
    打印提示->等待输入->输入回车->打印提示->等待输入->输入回车->结束
    原因是电脑执行速度非常快,哪怕两个回车之间的间隔只有0.01秒,对程序来说,中间的时间也足够打印第二个提示了(你调试在中间打断点的话是另一回事)不知道楼主明白了没,即使你第一次读取后把System.in清空了,仍然不能避免这种情况,因为那时候System.in原本就已经空了,第二次输入在0.01秒以后才会到达
      

  5.   

    没啥好办法,自己写个scanner,处理InputStream吧。这个总是能实现的。Scanner内置有缓冲,很麻烦。
      

  6.   

    嗯,Scanner确实处理不了这个。自己处理InputStream,回去慢慢研究下。嘿嘿,目前先改了需求,不这么处理了。