![](/img/trans.png)
[英]Java input buffer and do-while loop behavior (why does it check first character 3 times?)
[英]JAVA: How can a nested do-while loop discard characters from the input buffer?
我正在通过Oracle的“ Java:初学者指南”进行工作,但对使用嵌套的do-while循环的小节感到困惑。 给出的示例创建了一个简单的猜谜游戏,用户在A和Z之间输入字母。如果他猜对了,程序将返回“ Right”,否则将执行附加代码并给出提示-它返回“太高”或“太低”。
作者指出,他正在使用嵌套的do-while循环来“丢弃输入缓冲区中的任何其他字符”。
当我运行没有嵌套do-while的程序时,无论我输入的字符大于要搜索的答案还是小于要搜索的答案,程序都会始终将其评估为小于答案。 当我使用嵌套的do-while运行程序时,程序将正确运行。
我的问题:我不了解嵌套的do-while如何影响程序的其余部分。 嵌套的do-while到底是什么,而外部的do-while不是?
这是代码:
class Application {
public static void main(String[] args)
throws java.io.IOException {
char ch, ignore, answer = 'K';
do {
System.out.println("I'm thinking of a number between A and Z");
System.out.println("Can you guess it: ");
ch = (char) System.in.read();
do {
ignore = (char) System.in.read();
} while(ignore != '\n');
if(ch == answer) System.out.println("Right");
else {
System.out.println("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);
}
}
内部do-while读取一个字符,并将其与换行符进行比较; 如果不是换行符,它将读取下一个字符。 如果输入abcde,“ a”将以var ch
结尾(由于外部do循环中的读取),bcde将全部被丢弃,而换行符将终止内部循环。
如果要分析特定输入,请提供输入。
内部do-while仅用于确保您正在读取输入的第一个字符且不再读取其他字符。 因为如您所见,它开始逐个字符地读取字符,直到找到“ \\ n”为止,就像按“ Enter”键一样。 因此,该程序将停止读取您的输入(或者可能更好,将清除缓冲区以供将来输入),并且比较的输入将是真实的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.