一、循环结构
1、循环结构
在某些条件满足的情况下,反复执行特定代码的功能,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。
2、循环语句分类
(1)for循环
(2)while 循环
(3)do-while循环
3、循环语句的四个组成部分
-
- 初始化部分(init_statement)
- 循环条件部分(test_exp)
- 循环体部分(body_statement)
- 迭代部分(alter_statement)
二、for 循环
1、语法格式
for (①初始化部分; ②循环条件部分; ④迭代部分){ // 初始化表达式:在循环开始最初执行,而且只执行唯一一次。
③循环体部分;
}
2、执行过程
-
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化
- ②负责判断是否满足循环条件,不满足则跳出循环
- ③具体执行的语句
- ④循环后,循环条件所涉及变量的变化情况
3、流程图
特点:首先执行循环变量的初始值,首次执行就有入口函数,先判断,再执行。适用于循环次数明确的情况。
4、说明
(1)循环条件部分为boolean类型表达式,当值为false时,退出循环 ;
(2)初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔 ;
(3)可以有多个变量更新,用逗号分隔 ;
(4)break关键字的使用:一旦在循环中执行到break,就跳出循环
5、扩展:foreach 循环(增强for)
语法格式:
for(元素变量x: 遍历对象 obj) {
引用了 x 的 Java 语句;
}
foreache 是 for 语句的特殊简化版本,不能完全取代 for语句。任何 foreach 语句都可以改写为 for 语句。
三、while 循环结构
1、语法格式
①初始化部分 //初始化只执行一次
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
2、执行过程
-
- 执行顺序:①②③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化。
- ②负责判断是否满足循环条件,不满足则跳出循环
- ③具体执行的语句。
- ④循环后,循环变量的变化情况。
3、流程图
特点:首次就有入口条件,先判断,再执行,不满足条件则不执行,适用于循环次数不确定的情况。
4、说明
(1)注意不要忘记声明④迭代部分。 否则, 循环将不能结束, 变成死循环。
(2)for 循环和 while 循环是可以相互转换的! 区别:for循环和while循环的初始化条件部分的作用范围不同。
四、do-while 结构
1、语法结构
①初始化部分; //只执行一次
do{
③循环体部分
④迭代部分
}while(②循环条件部分);
2、执行流程
- 执行顺序:①③④>②③④>②③④…②不满足为止。
- ①负责完成循环变量初始化。
- ②负责判断是否满足循环条件,不满足则跳出循环。
- ③具体执行的语句
- ④循环后,循环变量的变化情况
3、流程图
特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的 循环具有一定的风险性。
4、说明
(1)do-while循环至少会执行一次循环体!
(2)开发中,使用for和while更多一些。较少使用do-while
五、三种循环的区别
1、控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环和do-while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。
2、在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
3、如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次。
六、无限循环与嵌套循环
1、无限循环
无限循环:不在循环条件部分限制次数的结构。一般用于一直监听或等待某事件的触发或变量的值改变时就结束循环。
结束循环的方式:
(1)循环条件部分返回 false
(2)在循环体中,执行 break
常用的格式一:while 格式
while (true) {
循环体
}
常用的格式二:for 形式
for(;;){
循环体;
}
无限循环存在的原因是并不知道循环多少次, 需要根据循环体内部某些条件,来控制循环的结束。
2、嵌套循环(多重循环)
(1)将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。
(2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
(3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
常用格式:
for(初始化表达式①; 循环条件②; 步进表达式⑦) {
for(初始化表达式③; 循环条件④; 步进表达式⑥) {
执行语句⑤;
}
}
执行流程:
-
- 执行顺序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥
- 外循环一次,内循环多次。
七、特殊关键字的使用 break、continue
1、break
使用场景:
a、可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
b、还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。
作用:结束当前循环
2、continue
使用场景:循环结构中
作用:结束当次循环,开始下一次循环
3、带标签的break和 continue
如果遇到循环嵌套的情况,break 和 continue 语句只会使程序流程跳出包含它的最内层的循环结构,只跳出一层循环。
如果想 跳出外层循环,Java 提供了 “标签” 功能。
语法格式:
标签名 : 循环体 {
break / continue 标签名; // 此循环体的标签名必须与 break/continue 的标签名一致。
}
Demo:
public static void main(String[] args) {
Loop: for(int i=0;i<3;i++) { // 在for 循环前用标签标记
for(int j =0;j<6;j++) {
if(j==4) {
break[continue] Loop; // 跳出 Loop 标签标记的循环体
}
}
}
}
说明:
1、break 语句用于终止某个语句块的执行,只能用于 switch 和 循环语句中;
2、break 语句出现在多层嵌套的语句块中,可以通过标签指明要终止的是哪一层语句块 ;
3、continue 只能使用在循环结构中,该语句用于跳过其所在循环语句块的一次执行,继续下一次循环;
4、continue 语句出现在多层嵌套的循环语句体时,可以通过标签指明要跳过的是哪一层循环 ;
5、二者功能类似,但 continue 是终止本次循环,break 是终止本层循环;
6、break、 continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
7、标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面;
8、很多语言都有goto语句, goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。 Java中的break和continue是不同于goto的;