JAVA:嵌套的 do-while 循环如何丢弃输入缓冲区中的字符?

标签 java do-while

我正在阅读 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/

相关文章:

Java如何验证2个输入是否为 float

java - 从文本文件中读取,排序,然后再次写入

java - RxJava Observable 在 SpringBoot 项目中运行

java - ConcurrentSkipListSet 如何具有弱一致的迭代器?了解 'weakly consistent'的含义

java - SoundTouch 和 JNI

java - 如何让我的程序输出第一个值

java - Firebase 实时查询 startAt 和 endAt 在联合属性上未按预期工作

java - For 循环嵌套在 do... while 不起作用

javascript - 我在使用一些 javascript do while 循环时遇到问题

java - 嵌套在 do-while 循环中的 try-catch 没有实际循环是否有原因?