通过System.in.read()读取输入

时间:2015-02-23 20:26:32

标签: java input do-while

我正在试验一下控制台输入。

从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 个答案:

答案 0 :(得分:1)

因为第二个循环不会只调用read一次,而是重复调用它,每次循环一次,每次调用读取一个字符,直到它到达行的末尾。