Java扫描程序从第二次开始工作

时间:2017-12-04 17:10:40

标签: java console java.util.scanner

我按下进入控制台后尝试调用方法。问题是从第二次按回车的方法调用。首次按Enter后如何调用我的方法?

public void read() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Press Enter to continue");
    try {
        System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (scanner.hasNextLine()) {
        this.win();
    }
}
public void win() {
    if (true) {
        this.read();
    }
}

2 个答案:

答案 0 :(得分:3)

等待 Enter 被按下的代码"窃取" Scanner之前输入流中的那个字符可以看到它。因此,'\n'行消耗了第一个System.in.read()

当您根据控制台为scanner.hasNextLine()调用Scanner时,代码会阻止最终用户输入一行或终止该流。 <{1}}方法需要第二个'\n'才能返回。

您可以通过移除对hasNextLine的调用来解决此问题,并在下次调用之前调用System.in.read()来使用输入:

getNextLine()

答案 1 :(得分:2)

您不需要System.in.read();。如果此扫描程序的输入中有另一行,则java.util.Scanner.hasNextLine()方法返回true。在等待输入时,此方法可能会阻塞。

public class MyClass {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Press Enter to continue");

        if (scanner.hasNextLine()) {
             System.out.println("Victory!");
        }
    }
}

基本上,您的代码会等待用户在两点按任意键。首先是System.in.read();,然后是scanner.hasNextLine()。这就是为什么在控制台上打印victory之前需要按两次 Enter 键的原因。从代码中删除System.in.read();scanner.hasNextLine()将解决问题。