我一直在通过 Oracle 的“Java A Beginner's Guide”学习 Java,并且无法理解书中有关输入缓冲区和 do-while 循环的示例程序。
这个例子是关于一个数字猜测程序。它旨在忽略您可能输入的任何额外字符。所以如果你输入 ABC 然后按回车它只会检查 A。
我的问题更多关于输入缓冲区,如果我注释掉处理忽略的第二个 do-while 循环然后运行程序,它会检查该单个字符 3 次。因此,如果我输入一个“A”,然后按回车键,它似乎检查了 3 次,我得到了 3 次“......对不起,你太低了”输出信息。
如果我输入“AZ”然后按回车,它似乎检查了 4 次,它先检查 A,然后再检查 Z,然后再检查 A 2 次。
问题:
- 为什么似乎总是检查第一个字符 3 次?
- 回车键是否将 \n 分配给忽略变量?
当没有注释掉第二个 do-while 循环时,如果输入 ABC 然后按回车,这是正确的顺序吗?
A – 分配给 ch
B- 分配给忽略
C- 分配给忽略
Enter 键 (\n) – 分配给忽略,循环退出,因为分配了忽略 \n
如果回车键实际上指定 \n 忽略,我有点困惑?还是只是等到没有更多字符可以分配忽略?书中说按回车会导致换行。因此,do-while 循环在以下情况下终止:(ignore != '\n')。
谢谢你的帮助!
class Guess4{
public static void main (String args[])
throws java.io.IOException {
char ch, ignore, answer = 'K';
do {
System.out.println("I'm thinking of a letter between A and Z.");
System.out.println("Can you guess it: ");
//read a character
ch = (char) System.in.read();
/* discard any other characters in the input buffer
do {
ignore = (char) System.in.read();
} while(ignore != '\n');
*/
if(ch == answer) System.out.println("**Right**");
else {
System.out.print("...Sorry, you're ");
if(ch < answer) System.out.println("too low");
else System.out.println("too high");
System.out.println("Try again!\n");
}
} while(answer != ch);
}
}