
任务2.3 循环语句
请输出2000—2100年中所有的闰年。
任务2.2给出的实施方法可以判断一个年份是不是闰年,而任务2.3需要重复判断是不是闰年,Java语言中提供了循环语句来解决这个问题。

2-8 while语和do-while语句
知识储备
2.3.1 while语句
while语句主要用于循环次数不确定的情况,一般格式如下。

while语句的执行过程为:首先计算布尔表达式的值,如果值为false,则不执行语句块。如果值为true,则执行语句块,重复这个过程直到表达式的值为false才退出循环。while语句流程图如图2-22所示。

图2-22 while语句流程图
【例2-15】 用while语句求1~100的和。

程序运行结果如图2-23所示。

图2-23 例2-15程序运行结果
2.3.2 do-while语句
do-while循环语句的一般格式如下。

【参数说明】
● do-while语句的执行过程为:先执行语句块,然后计算布尔表达式的值,如果值为false则退出循环,值为true则继续执行语句块,一直到值为false时退出循环。
● do-while语句和while语句的区别是,do-while语句的语句块至少被执行过一次,而while语句中的语句块只有布尔表达式的值为true时才被执行。
do-while语句流程图如图2-24所示。

图2-24 do-while语句流程图
【例2-16】 do-while语句的应用示例。

【分析结果】上面do-while语句的执行步骤如下所示。
1)定义一个整型变量x,并赋初值为10。
2)执行do后面大括号内的语句,输出value of x:10,x自增1,变为11。
3)判断while后面的布尔表达式是否成立。x=11,11<13成立,继续执行大括号内的语句。此时已经完整地执行了一遍do-while语句。
当x自增到13的时候,布尔表达式13<13不成立,值为false,退出循环。程序最终输出结果如图2-25所示。

图2-25 例2-16程序运行结果
在使用while语句和do-while语句时,如果while语句的布尔表达式的值一直为true,那么将会陷入死循环。
2.3.3 for语句

2-9 for语句
for循环语句的一般格式如下。

for循环语句的执行过程为:首先执行表达式1且仅执行一次,然后开始循环,每一次循环都先计算表达式2的值,如果表达式2的值为true,则执行语句块,并且执行表达式3,重复以上步骤;如果表达式2的值为false,则退出循环。for语句流程图如图2-26所示。

图2-26 for语句流程图
【例2-17】 用for循环语句计算1~100之间整数的和。

在上面代码中,首先定义一个变量sum用来保存各数相加的结果,并且赋初值为0。这里的for循环语句是怎么执行的呢?首先执行表达式i=1且仅执行一次,将1赋值给了i,接着判断表达式i<=100。由于这时i的值为1,结果为true,因此接着执行sum=sum+i,意思是将sum和i相加的和赋值给sum,这时sum的值变为了1。接着执行表达式i++,i自增之后从1变为2。继续按照刚刚的步骤循环,直到i增加到101,表达式i<=100的值变为false,退出循环。程序运行结果如图2-27所示。

图2-27 例2-17程序运行结果
2.3.4 跳转语句

2-10 跳转语句
当程序进行到某一步时,想要结束或者中断这个循环,可以用跳转语句来实现这个功能。这里重点介绍两种跳转语句:break语句和continue语句。
break语句和continue语句都可以用来跳出当前循环,break语句还可以用在switch语句当中。break语句和continue语句两者的主要区别是:break语句用于结束整个循环语句,不再执行该循环语句或者程序块;而continue语句的作用是中断当前的这次循环,还会继续执行后面的循环。简而言之,break语句跳出循环,continue语句继续执行下一个循环。下面用具体的案例来说明。
【例2-18】 break语句和continue语句的应用示例。

在上面代码中,for循环语句当中的break语句用来跳出整个循环,因此运行结果不会有任何输出。接下来将break语句注释掉,加上continue语句,代码如下所示。

在上面代码中,当i的值为0时,continue语句会结束本次循环,因此后面的“System.out.println(i);”将不会执行,而进入到下一次循环,即i会自增1变为1,此时i<5成立,i==0不成立,执行“System.out.println(i);”输出1,重复上述过程直到不满足for循环的循环条件时,退出for循环。程序运行结果如图2-28所示。

图2-28 例2-18程序运行结果(用continue语句)
任务实施
通过储备知识的学习,可以知道任务2.3有多种可以解决的办法。
用while语句实现的代码如下所示。

用for语句实现的代码如下所示。

用do-while语句实现的代码如下所示。

任务演练
【任务描述】
用循环语句依次输出1~100之间的整数,每10个数一行。
【任务目的】
1)熟练掌握Java循环语句的用法。
2)掌握while循环语句和for循环语句的不同之处。
【任务内容】
具体步骤如下。
1)启动Eclipse,创建Java项目,项目名称设为“项目实训2_3”。
2)创建类Test。
3)分别用for循环语句和while循环语句实现输出1~100之间的整数。
在代码页面上右击,在弹出的快捷菜单中选择“Run As”→“Java Application”命令,运行程序,并观察结果。