程序控制结构
第五章 程序控制结构
顺序控制
- 程序从上到下逐行地进行,中间没有任何判断和跳转。
分支控制 if - else
让程序有选择地执行。
单分支
if (条件表达式) { 执行代码块; }
双分支
if (条件表达式) { 执行代码块1; }
else { 执行代码块2; }
多分支
if (条件表达式1) { 执行代码块1; }
else if (条件表达式2) { 执行代码块2; }
…
else if (条件表达式n) { 执行代码块n; }
else { 执行代码块 n+1 ; }
嵌套分支:在一个分支结构中又完整地嵌套了另一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支。规范:不要超过三层,可读性不好。
switch 分支结构
switch(表达式){
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
……
case 常量n:
语句块n;
break;
default:
default语句块;
}
★switch 分支结构细节
- 表达式数据类型,应该和 case 后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int ;
- switch(表达式)中表达式的返回值必须是:byte、short、int、char、enum、String 中的一个;
- case 子句中的值必须是常量,而不能是变量;
- default子句可以没有。当没有匹配的 case 时,执行 default;
- break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块,如果没有写 break ,程序会顺序执行到 switch 结尾。
for 循环控制
for(循环变量初始化 ; 循环条件 ; 循环变量迭代){
循环操作(执行代码块);
}
for 细节
- 循环条件是返回一个布尔值的表达式;
- for(; 循环判断条件 ;) 中的初始化和变量迭代可以写到其他地方,但是两边的分号不能省略;
(注意:for(; ;) 表示无限循环)
- 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
while 循环控制
循环变量初始化 ;
while(循环条件){
循环操作(执行代码块);
循环变量迭代 ;
}
while 细节
- 循环条件是返回一个布尔值的表达式;
- while 循环是先判断再执行语句(和 do - while 相反)。
do - while 循环控制
循环变量初始化 ;
do{
循环操作(执行代码块);
循环变量迭代 ;
} while (循环条件) ;
do - while 细节
- 循环条件是返回一个布尔值的表达式;
- do - while 循环是先执行语句再判断(和 while 相反),因此它至少执行一次。
多重循环控制
- 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for、while、do - while 均可以作为外层循环和内存循环;
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。只有当内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的外层循环。
- 设外层循环次数为 m 次,内层为 n 次,则内层循环体实际上需要执行 m * n 次。
1 | // 打印空心金字塔 |
跳转控制语句 - break
- 当某个条件满足时,终止循环。
Math.random() ——> 随机生成一个大于等于0.0,小于1.0的小数,double类型
break细节
break 语句出现在多层嵌套循环的语句块中时,可以通过标签指明要终止的是哪一层的语句块;
1 | public class Test{ |
(注意:break 语句可以指定退出哪一层;
lebel 是标签,名称由程序员指定;
break 后指定到哪个 label 就退出哪个 label ;
在实际开发中,尽量不要使用标签;
如果没有指定 break,默认退出最近的循环体。)
跳转控制语句 - continue
- 用于结束本次循环,继续执行下一次循环。
continue 细节
continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这和前面 break 标签 的使用规则一样。
跳转控制语句 - return
- return 使用在方法,表示跳出所在的方法;如果用在 main 方法中,则表示退出程序。