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键之前按了许多键,他们也会保存在输入缓冲中。通过不断读入输入内容,直到行的末尾,这个循环排除了这些字符。如果不排除这些字符,他们也会作为猜测发送到程序,这是不合理的。