为什么按任意键方法不会循环停止?
Why the press any key method does not stop in a loop?
我在java这里找到了这个方法。
private void pressAnyKeyToContinue() {
try {
System.in.read();
}
catch(Exception e) {}
}
我遇到的问题是当我想多次调用它时。我在打印如下消息的方法中使用它:
private void keyMessage() {
System.out.print("Press any key to continue...");
pressAnyKeyToContinue();
然后我在这里使用这个方法:
public void method() {
message1();
for (Class class : classes) {
keyMessage();
}
}
我遇到的问题是当我首先调用 method() 时它会打印出来。
Otuput: Press any key to continue...
然后我按一个键+回车。直到这里一切都完美,然后它打印:
Output: Press any key to continue... //* times of the loop
我的意思是它不让我按任何键。它只是一直持续到循环结束。
感谢您的回答,抱歉我的英语不好。我知道这样不好。
标准控制台java根本无法做到这一点。所有输入的字符都会被缓冲,直到您按下回车键,此时它们都可用在 System.in.
所以,如果你循环你的 'press any key' 代码,比如 5 次,然后我输入句子 'hello!',你的代码仍然停留在第一个,等待按键。如果我然后按回车键,所有 5 个循环立即完成,如果你稍后调用 waitForKey,它会立即 return 再 2 到 3 次(一次用于感叹号,一次用于换行符......两次)如果在 windows 上,因为他们的换行符是 2 个字符)。
TL;DR:您不能为此使用 System.in.read()
。完全没有。
一种解决方案是要求用户不要按'any'键,而是按'enter'键,然后在设置分隔符后使用例如扫描仪的next()
调用到换行符,或者编写不断调用 System.in.read()
直到 returns '\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;
}
}
我在java这里找到了这个方法。
private void pressAnyKeyToContinue() {
try {
System.in.read();
}
catch(Exception e) {}
}
我遇到的问题是当我想多次调用它时。我在打印如下消息的方法中使用它:
private void keyMessage() {
System.out.print("Press any key to continue...");
pressAnyKeyToContinue();
然后我在这里使用这个方法:
public void method() {
message1();
for (Class class : classes) {
keyMessage();
}
}
我遇到的问题是当我首先调用 method() 时它会打印出来。
Otuput: Press any key to continue...
然后我按一个键+回车。直到这里一切都完美,然后它打印:
Output: Press any key to continue... //* times of the loop
我的意思是它不让我按任何键。它只是一直持续到循环结束。
感谢您的回答,抱歉我的英语不好。我知道这样不好。
标准控制台java根本无法做到这一点。所有输入的字符都会被缓冲,直到您按下回车键,此时它们都可用在 System.in.
所以,如果你循环你的 'press any key' 代码,比如 5 次,然后我输入句子 'hello!',你的代码仍然停留在第一个,等待按键。如果我然后按回车键,所有 5 个循环立即完成,如果你稍后调用 waitForKey,它会立即 return 再 2 到 3 次(一次用于感叹号,一次用于换行符......两次)如果在 windows 上,因为他们的换行符是 2 个字符)。
TL;DR:您不能为此使用 System.in.read()
。完全没有。
一种解决方案是要求用户不要按'any'键,而是按'enter'键,然后在设置分隔符后使用例如扫描仪的next()
调用到换行符,或者编写不断调用 System.in.read()
直到 returns '\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;
}
}