我正在阅读 Oracle 的“Java:初学者指南”,我被有关使用嵌套 do-while 循环的小节难住了。给出的示例创建了一个简单的猜谜游戏,用户在 A 和 Z 之间输入一个字母。如果他猜对了,程序将返回“正确”,否则会执行附加代码并给出提示 - 它会返回“太高”或“太低”。
作者声称他正在使用嵌套的 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 将全部被丢弃,换行符将终止内层循环。
如果您想要分析特定输入,请提供输入。
关于JAVA:嵌套的 do-while 循环如何丢弃输入缓冲区中的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337066/