为什么按任意键方法不会循环停止?

我在这里找到的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

我的意思是它不允许我按任何键。它一直持续到循环结束。


感谢您对我的英语的回答和抱歉。我知道这不好。


慕容3067478
浏览 107回答 1
1回答

拉莫斯之舞

标准控制台 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;    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java