2015-02-23 120 views
-1

我正在試驗一些控制檯輸入。通過System.in.read讀取輸入()

由於System.in.read()而言,我目前瞭解, 1.它從鍵盤讀取字符的 2.它將它們保存爲整數值,即需要投 3.它是行緩衝,即它讀取任何字符,直到ENTER被擊中。

現在我想明白到底發生了什麼,當我想讀一個字符,像這樣

do 
{ 
char ch, answer = 'C', ignore; 
System.out.println("Try to guess the correct letter"); 

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

// discard any characters in the input buffer 

do 
{ 
ignore = (char) System.in.read(); 
} 
while(ignore != '\n'); 

if(answer == ch) System.out.println("Right"); 
} 
while(answer != ch); 

我偶然發現了這個片段並插入我已經掌握了,雖然我打算打印語句後爲了讀取單個字符,該方法將讀取任何鍵入的字符,直到我按下回車鍵。

因此,在第二個循環中,我會放棄在第一個循環之後輸入的任何字母,直到按下ENTER鍵,對吧?

我知道由於遺漏了第二個do-while循環而導致的影響:回車將根據給定的if條件進行檢查。但是,它是如何工作的:第一個方法調用將真正導致只讀取一個字符,第二個方法讀取所有其他字符?

回答

1

因爲第二個循環不會只調用一次read,而是每次通過循環調用它,每次調用讀取一個字符,直到它到達行尾。

+0

對不起,我的錯。當然,我們正在談論一個循環。 – 2015-02-23 20:33:36

+0

就像我比如說,讀一個'A'然後回車。什麼會發生?我會讀A,跳到第二個循環,並繼續閱讀直到ENTER被擊中? – 2015-02-23 20:39:15

+0

這就是你的程序會做的,是的。 – 2015-02-23 20:41:48