3.4 循环语句
循环结构用于反复执行一个语句块,直到满足终止循环的条件时为止。一个循环一般包含3部分内容。
1)初始化部分:设置初始条件,一般只执行一次。
2)终止部分:设置终止条件,它应该是一个布尔表达式,每次循环都要求值一次,用以判断是否满足终止条件。
3)循环体部分:被反复执行的语句块。
Java语言提供4种循环结构:当型循环、直到型循环、for循环和foreach循环。
3.4.1 while语句
1)作用:实现“当型”循环结构。
2)格式:while (<表达式>)
语句
说明:
①表达式称为循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来;
②语句称为循环体,可以是单个或复合语句。
3)执行过程:先计算表达式的值,当表达式的值为true时,重复执行指定的语句;当表达式的值为false时,结束循环,如图3-14所示。
图3-14 while语句执行过程
【例3.8】用while语句计算,即求累加和:S=1+2+3+4+…+n。
流程图如图3-15所示,程序运行结果如图3-16所示。
图3-15 求累加和流程图1
图3-16 求累加和运行结果
说明:
①while语句是先判断表达式i≤n是否成立,若条件成立,则将sum加i后赋给sum及i增加1;若条件不成立,则不执行相应语句,退出循环。
②当表达式的值一开始不成立,语句一次也不执行。如当输入n为0时,i≤n不成立,语句sum=sum+i;和i++;一次也不执行。
③在循环体中应有能不断修改循环条件的语句,最终能使循环结束,否则会形成“死循环”。如i++;语句,使i不断加1,直到大于n为止。
3.4.2 do…while语句
1)作用:实现“直到型”循环结构。
2)格式:
说明:
①表达式称为循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来;
②语句称为循环体,可以是单个语句或复合语句;
③do…while语句以分号结束。
3)执行过程:先执行语句,然后计算表达式的值,当表达式的值为true时,就重复执行语句;直到表达式值为false才结束循环,如图3-17所示。
【例3.9】用do…while语句计算,即求S=1+2+3+4+…+n。
图3-17 直到型循环结构
流程图如图3-18所示,程序运行结果如图3-16所示。
说明:
①do…while语句是先执行sum=sum+i;和i++;语句,后判断表达式i≤n是否成立。若条件成立,则继续执行循环体;若条件不成立,则不执行相应语句,退出循环。
②即使表达式的值一开始就不成立,语句仍要执行一次。如当输入n为0时,i≤n不成立,但语句sum=sum+i;和i++;也要执行一次。
③在循环体中应有能不断修改循环条件的语句,最终能使循环结束,否则会形成“死循环”。
图3-18 求累加和流程图2
3.4.3 for语句
1.for语句格式
for (<表达式1>;<表达式2>;<表达式3>)
<语句>
说明:
①表达式1称为循环初始化表达式,通常为赋值表达式,简单情况下为循环变量赋初值。
②表达式2称为循环条件表达式,通常为关系表达式或逻辑表达式,简单情况下为循环结束条件。
③表达式3称为循环增量表达式,通常为赋值表达式,简单情况下为循环变量增量。
④语句部分为循环体,它可以是单个或复合语句。
2.for语句的执行过程
1)计算表达式1的值。
2)计算表达式2的值,若表达式2的值为“真”时,则转到(3);若表达式2的值为“假”时,则结束循环。
3)执行循环体语句。
4)计算表达式3的值,返回(2)继续执行。
for语句的执行过程如图3-19与图3-20所示。
for语句可以和下列while语句等效:
图3-19 for语句执行过程1
【例3.10】用for语句计算。
流程图如图3-21所示,运行结果如图3-16所示。
图3-21 求累加和流程图3
在上例中,表达式1:i=1完成对循环变量i的初始化赋值工作,使i的初值为1;表达式2:i<=n判断循环变量i的值是否小于或等于n,若不成立则结束循环,若成立则执行sum=sum+i;语句;再执行表达式3:i++,使用循环变量i加1,转表达式2继续判断i<=n是否成立。
说明:
①for语句中的3个表达式都可省略,但其中的两个分号不能省略。
②若表达式1省略,则应在for语句之前给循环变量赋初值。例如:
③若表达式2省略,则不判断循环条件,循环无终止地进行下去,形成“死循环”,即认为表达式2始终为真,因此表达式2通常不能省略。
④若表达式3省略,则在循环体中应有能不断修改循环条件的语句。例如:
⑤若省略表达式1和表达式3,只有表达式2,即只给出循环条件。例如:
此时,for语句和while语句完全相同。上述语句相当于:
⑥表达式1和表达式3可以是一个简单的表达式,也可以是其他表达式,当然可以是逗号表达式,即用逗号“,”隔开的多个简单表达式,它们的运算顺序是从左到右顺序进行。
for(sum=0,i=1;i<=n;i++)
sum += i;
由此可见,用for语句比用while语句书写更简洁。
【例3.11】计算,即求:。
分析:求解该题仍采用求累加和的思想,即用循环语句将级数中各项值:t=1.0/(i*(i+1))依次加入累加和sum中。程序如下:
程序执行后输出:
和是:0.9523809523809522