Java程序设计案例教程
上QQ阅读APP看书,第一时间看更新

3.4 循环语句

循环结构用于反复执行一个语句块,直到满足终止循环的条件时为止。一个循环一般包含3部分内容。

1)初始化部分:设置初始条件,一般只执行一次。

2)终止部分:设置终止条件,它应该是一个布尔表达式,每次循环都要求值一次,用以判断是否满足终止条件。

3)循环体部分:被反复执行的语句块。

Java语言提供4种循环结构:当型循环、直到型循环、for循环和foreach循环。

3.4.1 while语句

1)作用:实现“当型”循环结构。

2)格式:while (<表达式>)

语句

说明:

①表达式称为循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来;

②语句称为循环体,可以是单个或复合语句。

3)执行过程:先计算表达式的值,当表达式的值为true时,重复执行指定的语句;当表达式的值为false时,结束循环,如图3-14所示。

978-7-111-60245-3-Chapter03-35.jpg

图3-14 while语句执行过程

【例3.8】用while语句计算978-7-111-60245-3-Chapter03-36.jpg,即求累加和:S=1+2+3+4+…+n。

978-7-111-60245-3-Chapter03-37.jpg

流程图如图3-15所示,程序运行结果如图3-16所示。

978-7-111-60245-3-Chapter03-38.jpg

图3-15 求累加和流程图1

978-7-111-60245-3-Chapter03-39.jpg

图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)格式:

978-7-111-60245-3-Chapter03-40.jpg

说明:

①表达式称为循环条件表达式,一般为关系表达式或逻辑表达式,必须用“()”括起来;

②语句称为循环体,可以是单个语句或复合语句;

③do…while语句以分号结束。

3)执行过程:先执行语句,然后计算表达式的值,当表达式的值为true时,就重复执行语句;直到表达式值为false才结束循环,如图3-17所示。

【例3.9】用do…while语句计算978-7-111-60245-3-Chapter03-41.jpg,即求S=1+2+3+4+…+n。

978-7-111-60245-3-Chapter03-42.jpg

图3-17 直到型循环结构

978-7-111-60245-3-Chapter03-43.jpg

流程图如图3-18所示,程序运行结果如图3-16所示。

说明:

①do…while语句是先执行sum=sum+i;和i++;语句,后判断表达式i≤n是否成立。若条件成立,则继续执行循环体;若条件不成立,则不执行相应语句,退出循环。

②即使表达式的值一开始就不成立,语句仍要执行一次。如当输入n为0时,i≤n不成立,但语句sum=sum+i;和i++;也要执行一次。

③在循环体中应有能不断修改循环条件的语句,最终能使循环结束,否则会形成“死循环”。

978-7-111-60245-3-Chapter03-44.jpg

图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语句等效:

978-7-111-60245-3-Chapter03-45.jpg

978-7-111-60245-3-Chapter03-46.jpg

图3-19 for语句执行过程1

【例3.10】用for语句计算978-7-111-60245-3-Chapter03-47.jpg

978-7-111-60245-3-Chapter03-48.jpg

流程图如图3-21所示,运行结果如图3-16所示。

978-7-111-60245-3-Chapter03-49.jpg

图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语句之前给循环变量赋初值。例如:

978-7-111-60245-3-Chapter03-50.jpg

③若表达式2省略,则不判断循环条件,循环无终止地进行下去,形成“死循环”,即认为表达式2始终为真,因此表达式2通常不能省略。

④若表达式3省略,则在循环体中应有能不断修改循环条件的语句。例如:

978-7-111-60245-3-Chapter03-51.jpg

⑤若省略表达式1和表达式3,只有表达式2,即只给出循环条件。例如:

978-7-111-60245-3-Chapter03-52.jpg

此时,for语句和while语句完全相同。上述语句相当于:

978-7-111-60245-3-Chapter03-53.jpg

⑥表达式1和表达式3可以是一个简单的表达式,也可以是其他表达式,当然可以是逗号表达式,即用逗号“,”隔开的多个简单表达式,它们的运算顺序是从左到右顺序进行。

for(sum=0,i=1;i<=n;i++)

sum += i;

由此可见,用for语句比用while语句书写更简洁。

【例3.11】计算978-7-111-60245-3-Chapter03-54.jpg,即求:978-7-111-60245-3-Chapter03-55.jpg

分析:求解该题仍采用求累加和的思想,即用循环语句将级数中各项值:t=1.0/(i*(i+1))依次加入累加和sum中。程序如下:

978-7-111-60245-3-Chapter03-56.jpg

程序执行后输出:

和是:0.9523809523809522