亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么按任意鍵方法不會循環停止?

為什么按任意鍵方法不會循環停止?

慕容3067478 2022-07-20 10:34:54
我在這里找到的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...然后我按一個鍵+回車。直到這里一切都完美,但它會打?。篛utput: Press any key to continue... //* times of the loop我的意思是它不允許我按任何鍵。它一直持續到循環結束。感謝您對我的英語的回答和抱歉。我知道這不好。
查看完整描述

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;

    }

}


查看完整回答
反對 回復 2022-07-20
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號