我按下进入控制台后尝试调用方法。问题是从第二次按回车的方法调用。首次按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();
}
}
答案 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()
将解决问题。