而不是Scanner使用BufferedReader,就像这样:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
String p = reader.readLine();
System.out.println(s);
System.out.println(p);
System.out.println(reader.ready());
}
}
要了解更多的内容,请查看here和here.作为经验法则,当您需要解析的东西(如nextInt)时,请使用扫描仪,否则请使用BufferedReader. BufferedReader比扫描仪快很多.
至于为什么你有这个麻烦的行为,请参阅javadoc扫描仪.
适用于您特定情况的部分是:
A scanning operation may block waiting for input.
在您的情况下,这意味着:扫描仪读取前两行之后,扫描仪正在等待输入,由其方法调用sc.hasNextLine()引起.然后当Enter被击中时,它得到一个输入(因此它打印为true,根据docs,当输入时返回true).在方法调用sc.hasNextLine()之后,程序中没有更多的可执行行,程序结束,给出了需要两次输入命中的错觉.