繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM