2016-02-27 169 views
1

我正在通過Herbert Schildt編寫的「Java初學者指南,第六版」。Do-While循環Java輸出錯誤

在Windows Powershell中使用Windows 7 Home Premium 64位Java 1.8.0_73。

當我編譯這個練習(沒有編譯器警告或錯誤凡):

class DoWhileDemo { 
    public static void main(String[] args) 
    throws java.io.IOException { 
     char ch; 

     do { 
      System.out.print("Press a key followed by ENTER: "); 
      ch = (char) System.in.read(); 
     } while(ch != 'q'); 
    } 
} 

當我與公司的Java DoWhileDemo「我得到

Press a key followed by ENTER: f 
Press a key followed by ENTER: Press a key followed by ENTER: Press a key followed by ENTER: q 

退出程序運行如預期(當我點擊'q'並按下ENTER鍵),但是「按一個鍵後按ENTER:」的多次打印都沒有。

任何想法爲什麼會發生這種情況?

回答

1

聲明

ch = (char) System.in.read(); 

讀取一個字符。在Windows系統上

q 
\r 
\n 

:當用戶按下qenter,三個字符會發送到你的代碼。因此,在輸入隊列中沒有任何內容並且代碼停止讀取之前,您可以通過循環獲得兩個更多的指針。

在Linux上,您只會看到一個額外提示,因爲在這種情況下只會發送兩個字符(q\n)。

如果您要處理整行(如您所見),您必須將System.in換成BufferedReader,以便您撥打readLine()

+0

實在好笑,不等於,你就回答了同樣的事情重複的問題;)。 – Tunaki

+0

18個月前...我不記得那一個:-) –

-1

這是因爲,當你按下f,這意味着到q所以條件爲真,當你按下q條件爲假循環再次執行,再而三環路出口

+0

這是誤導。並儘量避免發佈這樣的誤導性答案_關閉它作爲一個更好的答案重複... – Tunaki