1 回答
TA贡献1820条经验 获得超10个赞
标准控制台 java 根本无法做到这一点。输入的所有字符都会被缓冲,直到您按下回车键,此时它们都可以在 System.in 中使用。
所以,如果你循环你的“按任意键”代码,比如说,5 次,然后我输入句子“你好!”,你的代码仍然停留在第一个,等待一个键。如果我然后按回车键,所有 5 个循环立即完成,如果您稍后调用 waitForKey,它会立即返回另外 2 到 3 次(一次用于感叹号,一次用于换行符.. 如果在 Windows 上两次,因为他们的换行符是 2 个字符)。
TL;DR:你不能用System.in.read()这个。完全没有。
一种解决方案是要求用户不要按“任何”键,而是按“输入”键,然后在将分隔符设置为换行符后使用例如扫描仪的next()调用,或者编写一直调用System.in.read()直到它返回的代码' \n':
private void pressEnterToContinue() {
while (true) {
int c;
try {
c = System.in.read();
} catch (IOException e) {
throw new RuntimeException(e);
}
if (c == -1 || c == '\n') return;
}
}
添加回答
举报
