![Java入门很轻松(微课超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/857/44509857/b_44509857.jpg)
3.3 循环语句
在实际应用中,往往会遇到一行或几行代码需要执行多次的情况,这就是代码的循环。几乎所有的程序都包含循环,循环是重复执行的指令,重复次数由条件决定,这个条件称为循环条件,反复执行的程序段称为循环体。
一个正常的循环程序,具有四个基本要素,分别是循环变量初始化、循环条件、循环体和改变循环变量的值。大多数编程语言中循环语句的结构形式如图3-12所示。
Java语言为用户提供了多种循环语句,有while循环语句、do…while循环语句、for循环语句、嵌套循环语句等。具体介绍如表3-2所示。
表3-2 循环语句
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-T60_49186.jpg?sign=1739530723-UEjCzD6wyCvXd9Kex0OtBn68WPTxqK3I-0-b4a0a9864ae83284efc083089173437e)
3.3.1 while循环语句
while循环语句根据循环条件的返回值来判断执行零次或多次循环体。当逻辑条件成立时,重复执行循环体,直到条件不成立时终止,while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P60_49185.jpg?sign=1739530723-HyLEVYLoNqMRN1sDnBdYZukes0qHTf4f-0-893cd85c87846580222add63d238b3ec)
在这里,语句块可以是一个单独的语句,也可以是几个语句组成的代码块。表达式可以是任意的表达式,表达式的值非零时为true,当条件为true时执行循环;当条件为false时,退出循环,程序流将继续执行紧接着循环的下一条语句。
while循环语句的执行流程如图3-13所示。
当遇到while循环语句时,首先计算表达式的返回值,当表达式的返回值为true时,执行一次循环体中的语句块,循环体中的语句块执行完毕时,将重新查看是否符合条件,若表达式的值还返回true将再次执行相同的代码,否则跳出循环。while循环的特点:先判断条件,后执行语句。
【例3.5】编写程序,实现100以内自然数的求和,即1+2+3+…+100,最后输出计算结果(源代码\ch03\3.5.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P61_49188.jpg?sign=1739530723-TwljEjw2qCqrQmWlCNy8IbU9t4r2w3dE-0-b1da82c915ff6491cc090617f42f6d33)
运行结果如图3-14所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P61_7281.jpg?sign=1739530723-JvdhjXCq5nfLzfh04UoxMe1uPbTmy3IV-0-88b028bf78b8cdf90584b04a86377eba)
图3-13 while循环语句的执行流程
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P61_7291.jpg?sign=1739530723-BPvR5iOv7elaHphcPjuacWiWhJolQ89v-0-b8cb76261ba148d56779a3726abc1885)
图3-14 while循环语句的应用
3.3.2 do…while循环语句
在Java语言中,do…while循环语句是在循环语句的尾部检查它的条件。do…while循环语句与while循环语句类似,但是也有区别。do…while循环语句和while循环语句的最主要区别:
(1)do…while循环语句是先执行循环体后判断循环条件,while循环语句是先判断循环条件后执行循环体。
(2)do…while循环语句的最小执行次数为1次,while循环语句的最小执行次数为0次。
do…while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P61_49189.jpg?sign=1739530723-rCNJWRUn8oHVcBccFKh43xW9XlmBiE1j-0-e0946d96217348074e86bcfbe055fa27)
这里的条件表达式出现在循环语句的尾部,所以循环语句中的语句块会在条件被测试之前至少执行一次。如果条件为真,控制流会跳转回上面的do,然后重新执行循环语句中的语句块,这个过程会不断重复,直到给定条件变为假为止。do…while循环语句的执行流程如图3-15所示。
程序遇到关键字do,执行花括号内的语句块,语句块执行完毕,执行while关键字后的布尔表达式,如果表达式的返回值为true,则向上执行语句块,否则结束循环语句,执行while关键字后的程序代码。
使用do…while循环语句应注意以下几点:
(1)do…while循环语句是先执行“循环体语句”,后判断循环终止条件,与while语句不同。二者的区别在于:当while后面的表达式开始的值为0(假)时,while循环语句的循环体一次也不执行,而do…while循环语句的循环体至少要执行一次。
(2)在书写格式上,循环体部分要用{}括起来,即使只有一条语句也如此;do…while循环语句最后以分号结束。
(3)通常情况下,do…while循环语句是从后面控制表达式退出循环。但它也可以构成无限循环,此时要利用break语句或return语句直接从循环体内跳出循环。
【例3.6】编写程序,实现100以内自然数的求和,即1+2+3+…+100,最后输出计算结果(源代码\ch03\3.6.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P62_49191.jpg?sign=1739530723-aN16liVGoUPLCUXy8pSuYAAKmJfGuX4u-0-5b45cffb600df2bec494bff962b760e3)
运行结果如图3-16所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P62_7415.jpg?sign=1739530723-Gb8n7240lp1r1aY26qjQA1Hb0YJrh9zD-0-f3c91fe5fd07d675ff21d89a21e221fc)
图3-15 do…while循环语句的执行流程
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P62_7425.jpg?sign=1739530723-qpcElYhQEtzGvrIhXhPl3Uls9mbM0DgW-0-b9cbdf02c51386d4949c3c45338cd559)
图3-16 do…while循环语句的应用
3.3.3 for循环语句
for循环语句和while循环语句、do…while循环语句一样,可以循环重复执行一个语句块,直到指定的循环条件返回值为假。for循环语句的语法格式为:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P63_49193.jpg?sign=1739530723-fZe5G23wygYLK2SgyMJopdRMS9cgqXDG-0-65c3648d49c1582810f16cfc2ac8dd02)
参数介绍如下:
(1)表达式1为赋值语句,如果有多个赋值语句可以用逗号隔开,形成逗号表达式,循环四要素中的循环变量初始化。
(2)表达式2返回一个布尔值,用于检测循环条件是否成立,循环四要素中的循环条件。
(3)表达式3为赋值表达式,用来更新循环控制变量,以保证循环能正常终止,循环四要素中的改变循环变量的值。
for循环语句的执行流程如下:
(1)表达式1会首先被执行,且只会执行一次。这一步允许用户声明并初始化任何循环控制变量。用户也可以不在这里写任何语句,只要有一个分号出现即可。
(2)判断表达式2。如果为真,则执行循环语句块;如果为假,则不执行循环语句块,且控制流会跳转到紧接着for循环语句的下一条语句。
(3)在执行完for循环语句块后,控制流会跳回表达式3。该表达式允许用户更新循环控制变量。该表达式可以留空,只要在条件后有一个分号出现即可。
(4)条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环语句块,然后增加步值,再重新判断条件)。在条件变为假时,for循环语句终止。
for循环语句的执行流程如图3-17所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P63_49192.jpg?sign=1739530723-0evfNPrE8AULRxG3cTn5k88bIACFKDhR-0-5642be508348caa2dea393965d9acf67)
图3-17 for循环语句执行流程
☆大牛提醒☆
Java语言不允许省略for循环语句中的3个表达式,否则for循环语句将出现死循环现象。
【例3.7】编写程序,实现100以内自然数的求和,即1+2+3+…+100,最后输出计算结果(源代码\ch03\3.7.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P64_49195.jpg?sign=1739530723-VNdTXR8VWLx4T7IpQVv5D98ZBBf50QTR-0-0c2f1a33c035856da8a9af34bb4ff6de)
运行结果如图3-18所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P64_7599.jpg?sign=1739530723-96ks7ye9v7L8mUybqM7QyxcfKSUdan7N-0-1fc61c85181410ea8d40083bd6e639bf)
图3-18 for循环语句的应用
3.3.4 foreach语句
foreach语句是for循环语句的特殊简化版本,但是foreach语句并不能完全取代for循环语句,也就是说,并不是所有的foreach语句都可以改写为for循环语句版本。foreach不是一个关键字,只是我们习惯上将这种特殊的for循环语句格式称为foreach语句。
foreach语句在遍历数组等方面为程序员提供了很大的方便,其语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P64_49196.jpg?sign=1739530723-oSeDwM3h3hvrNVONz9hRbhnkfuXlW74s-0-45ec622211d4ed9402bd2b935904b50f)
参数说明:
(1)循环变量不用进行初始化,且类型与遍历对象中的数据类型一致。
(2)遍历对象是指一组数据的集合,可以从第一个元素开始一个一个进行访问。
(3)遍历对象可以是数组或者类的实例对象。
【例3.8】编写程序,使用foreach语句遍历输出一个简单的数组(源代码\ch03\3.8.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P64_49197.jpg?sign=1739530723-3YpV4kwjGBTtsNb4YBmU2mpAsXoPf4nb-0-3b34281d324138debb623868a5b8c090)
运行结果如图3-19所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P65_7692.jpg?sign=1739530723-EmsTFuYMOxO0NuxyYxv8bLEbKu1Z7YRa-0-fa4096055cbf6bf5807a7c0d26477f28)
图3-19 foreach语句的应用
3.3.5 循环语句的嵌套
在一个循环语句内又包含另一个循环语句,称为循环嵌套。如果内嵌的循环语句中还包含有循环语句,这种称为多层循环。while循环语句、do…while循环语句和for循环语句之间可以相互嵌套。
1.嵌套for循环语句
Java语言中,嵌套for循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P65_49200.jpg?sign=1739530723-AGsAYA1JhLyXkPAKSYephSn0jrxIv5ho-0-9d2adb5ebed9fa9af061363390af08f6)
嵌套for循环语句的流程如图3-20所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P65_49199.jpg?sign=1739530723-X5G67CpOI15UBcYaAQI0SPbWraattIV9-0-6ec86eacf012b890f52a20951039f3f2)
图3-20 嵌套for循环语句的流程
【例3.9】编写程序,在窗口输出数字金字塔(源代码\ch03\3.9.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P65_49198.jpg?sign=1739530723-bCXJisHnNSGEyQv8aJKoCw7ceMuSZ8nN-0-62106f082458f448628f8f5810c58455)
运行结果如图3-21所示。
2.嵌套while循环语句
Java语言中,嵌套while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P66_49206.jpg?sign=1739530723-HkxoZaD8f5IEedpqTABo26mpuxD7cVxt-0-b9b0bcbca2fcbe7ac78743c5471c04fd)
嵌套while循环语句的流程如图3-22所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P66_8034.jpg?sign=1739530723-Pz3xpnyvj0JjiDaUdyDPtsCasrEipXQr-0-cdafe0e05efbc6dd45b07b6dd106cc22)
图3-21 嵌套for循环语句的应用
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P66_49207.jpg?sign=1739530723-VNNKrGO25j81uNrcWTx65bqrKW8FjqJW-0-95beea893b311561bebf8f6dcda91ded)
图3-22 嵌套while循环语句的流程
【例3.10】编写程序,在窗口输出九九乘法表(源代码\ch03\3.10.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P66_49208.jpg?sign=1739530723-yNAYsdp7TbkdBh9lApvn6rjzCiF44QQ6-0-c1c98cbb16e21e3ab8b61e1014de20c2)
运行结果如图3-23所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P67_8210.jpg?sign=1739530723-iRZzKYCyrPvJnU59N2cRa6jig37jeV4D-0-86bfd6e946788f64537817014b0126a1)
图3-23 嵌套while循环语句的应用
3.嵌套do…while循环语句
Java语言中,嵌套do…while循环语句的语法格式如下:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P67_49211.jpg?sign=1739530723-X3dKHsOLTjprnNp1wq8tQ1P6wmSlp0FX-0-4bfec8809b96f2d04e305ffca75e139c)
嵌套do…while循环语句的流程如图3-24所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P67_49210.jpg?sign=1739530723-Suao0hSHMhBnydw2xvLD6DXpPAJEExZh-0-20b7a566860e68690cbd50bd1f2bf8fb)
图3-24 嵌套do…while循环语句的流程
【例3.11】编写程序,在窗口输出九九乘法表(源代码\ch03\3.11.txt)。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P68_49214.jpg?sign=1739530723-hy1oqr1OmPu8FvSIj0Fsw0ffl01jtcOt-0-4dd5dcb5acf7035f099625993a51833a)
运行结果如图3-25所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P68_8417.jpg?sign=1739530723-YteQD9tsPCzpI8kBp8C9yl2Ht6XYDCPd-0-ae8d74a163f99859e774a0c97c5d44e3)
图3-25 嵌套do…while循环语句的应用(九九乘法口诀)
3.3.6 无限循环
如果条件永远不为假,则循环将变成无限循环。for循环语句在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,用户可以将某些条件表达式留空来构成一个无限循环。例如下面这段代码:
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P68_49215.jpg?sign=1739530723-oZIqqcrqRMTuNrjBGGDSvlEmybF3qrEz-0-3c6e9f49a272fbf1aba7c264ae16c5fb)
当条件表达式不存在时,它被假设为真。用户也可以设置一个初始值和增量表达式,但是一般情况下,Java程序员偏向于使用for(;;)结构来表示一个无限循环,运行结果如图3-26所示。
![](https://epubservercos.yuewen.com/5D7B55/23721525401929906/epubprivate/OEBPS/Images/Figure-P68_8484.jpg?sign=1739530723-i3Icja4WIgsuZ0FmZ9aii6vwWsPtWRSH-0-d2f2d115120a58dd04ce0585ffe87566)
图3-26 无限循环的运行结果
☆大牛提醒☆
可以使用“break”语句终止一个无限循环。