do-while循环

Java还有一种循环是do-while。与for、while这些在循环顶部进行条件测试的语句不同,do-while是在循环底部进行条件检查。这就意味着do-while循环至少要执行一次。do-while循环的基本形式如下:
do
{
    statement sequence
} while(condition)
尽管只有一条语句时并不一定要使用花括号,但为了提高do-while结构的可读性,常常会使用花括号,这样可以防止与while相混淆。只要条件表达式为真,就会执行do-while循环。
下面的程序会一直循环,直到用户输入字母q:
    public static void main(String[] args) throws java.io.IOException
    {
        char ch;
        
        do
        {
            System.out.println("press a key followed by ENTER:");
            ch = (char) System.in.read();
        } while (ch != 'q');
    }
运行效果:
press a key followed by ENTER:
a
press a key followed by ENTER:
press a key followed by ENTER:
q
我们发现当缓冲区有多个输入时,会依次读取直到最后
我们可以改写程序:
    public static void main(String[] args) throws java.io.IOException
    {
        char ch,ignore;
        
        do
        {
            System.out.println("press a key followed by ENTER:");
            ch = (char) System.in.read();
            //discard any other characters in the input buffer
            do
            {
                ignore = (char) System.in.read();
            } while (ignore != '\n');
        } while (ch != 'q');
    }
前面解释过,控制台输入时行缓冲的,在传送字符之前必须按Enter键。按下Enter键会生成一个回车符和一个换行符。这些字符还保存在输入缓冲中。而且,如果在按Enter键之前按了许多键,他们也会保存在输入缓冲中。通过不断读入输入内容,直到行的末尾,这个循环排除了这些字符。如果不排除这些字符,他们也会作为猜测发送到程序,这是不合理的。