2015-02-23 86 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