
3.3.1 while循环语句
while循环语句需要先进行循环条件(布尔表达式)判断,即计算该循环条件的值,结果为true时进入循环体(重复执行的语句块),结果为false时退出循环。具体语法结构如下:
while (循环条件){ 重复执行语句块; }
while循环语句的执行流程如图3.8所示。其执行逻辑为:计算循环条件的结果,如果结果为true,执行“重复执行语句块”,即循环体;如果结果为false,退出循环,循环体执行完毕后重新回到循环条件判断。使用while循环时,需要注意以下几点:
循环条件结果只能为true或者false。
如果循环体只有一条语句则“{}”可以省略。
如果开始第1次循环时循环条件计算的值为false,那么循环体将不会执行。
一般需要在循环体中更改循环变量(循环条件中的变量)的值,使循环趋于结束,否则如果循环条件的结果始终为true,会造成死循环。
知识点拨:所谓死循环,指的是一个无法终止的循环,即该循环会一直执行下去,无法退出。

图3.8 while循环处理流程图
根据以上语法,编写一个案例:小明被罚抄《咏鹅》3遍。实现思路:循环体为输出《咏鹅》的4句诗;循环条件是输出3次;根据循环条件可知,循环变量就是次数,初始次数应为0次;循环变量更替应该是每循环一次则次数加1,如例3-7所示。
【例3-7】 Demo0307.java

程序的运行结果如下:
鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。 完成了1次 鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。 完成了2次 鹅鹅鹅,曲项向天歌。白毛浮绿水,红掌拨清波。 完成了3次
例3-7中,第5行是循环变量初始化,该变量是根据循环条件推断出来的。第6行是循环条件,其作用是控制循环何时终止。如果循环条件返回值为true,则进入循环体,即执行第7~12行;如果循环条件返回值为false,则终止循环。第7~12行是重复执行的代码,即循环体,顺序执行。其中,第10行的num++是循环变量更替,如果此处不写该语句,那么num值将一直保持初始值0,循环条件结果将一直为true,就会造成死循环。当第12行执行完毕,即循环体执行完毕后,重新执行第6行的循环条件,即重新进行前面的步骤,直到条件判断结果为false,即num等于3时,终止循环。
接下来,再编写一个案例来巩固循环的使用:计算1+2+3+…+100的结果并输出,如例3-8所示。
【例3-8】 Demo0308.java

程序的运行结果如下:
1+2+3+…+100的结果:5050
例3-8中,第5行初始化和为0,如果sum变量不进行声明和初始化,后续无法直接参与sum = sum + i的运算。第6行是循环变量i的初始化,因为1~100之和是从1开始加的,因此初始值为1。第7行是循环条件,如果i <= 100返回true,说明没有加到100,循环继续,否则循环终止。第8行的sum += i等价于sum = sum + i,将之前的和加上当前的i的值,重新赋值给sum。第9行的i++为循环变量更替,计算完毕后重新回到第7行进行循环条件判断,重复执行。
整体运行过程如下:第1次i = 1,计算累计到1的和为1,赋值给sum,然后执行i++,结果为2,循环体执行完毕;第2次进行“i <= 100”判断,结果为true,重新进入循环体,计算累计到2的和,赋值给sum后执行i++,结果为3,循环体执行完毕;第3次进行条件判断,结果为true,重新进入循环体,以此类推,一直计算到累计到100的和,i更新为101,循环条件的结果为false,退出循环。