JAVA: 嵌套的 do-while 循环如何丢弃输入缓冲区中的字符?
JAVA: How can a nested do-while loop discard characters from the input buffer?
我正在研究 Oracle 的 "Java: A Beginner's Guide",我被关于使用嵌套的 do-while 循环的小节难住了。给出的示例创建了一个简单的猜谜游戏,用户在其中输入 A 和 Z 之间的字母。如果他猜对了程序 returns "Right",否则将执行附加代码并给出提示——它要么returns "too high" 或 "too low".
作者声明他正在使用嵌套的 do-while 循环 "discard any other characters in the input buffer"。
当我运行没有嵌套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"。因此,程序将停止读取您的输入(或者更好的是,将为将来的输入清除缓冲区)并且比较的输入将是真实的。
我正在研究 Oracle 的 "Java: A Beginner's Guide",我被关于使用嵌套的 do-while 循环的小节难住了。给出的示例创建了一个简单的猜谜游戏,用户在其中输入 A 和 Z 之间的字母。如果他猜对了程序 returns "Right",否则将执行附加代码并给出提示——它要么returns "too high" 或 "too low".
作者声明他正在使用嵌套的 do-while 循环 "discard any other characters in the input buffer"。
当我运行没有嵌套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"。因此,程序将停止读取您的输入(或者更好的是,将为将来的输入清除缓冲区)并且比较的输入将是真实的。