介绍
程序的流程控制是什么?
是用来决定程序是如何执行的,主要有三大流程控制语句:
顺序控制、分支控制、循环控制
顺序控制
程序从上往下准行的执行,中间没有任何的循环和跳转。
分支控制
分支控制主要分为 if - else 语句构成的单分支、双分支、多分支、嵌套分支结构
以及switch 分支结构
首先我们来看 if、else 、else if 关键字够成的分支结构
单分支if
基本语法:
if(条件表达式){
执行代码块; // 里面输入执行该分支的逻辑
}
使用说明:
当条件表达式为 true 时,就会执行 { } 里的语句,为false则不执行
特别注意,如果{ }里只有一条语句,是可以不用{ }
如下
if(true) System.out.println("进入单分支if语句");
但最好还是加上{ },便于可读。
对应的流程图:
双分支if else
基本语法:
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
使用说明:
当条件表达式为 true 时,就会执行代码块1的语句,为false则执行代码块2的语句
依旧当{ }中只有一条语句{ }可以省略
对应的流程图:
多分支if-else if
基本语法:
if(条件表达式1){
执行代码块1;
}else if(条件表达式2){
执行代码块2;
}else if(条件表达式3){
执行代码块3;
}
... ...
else{
执行代码块n;
}
对于多分支值得说明两点
第一:多分支可以没有else,但是如果没有else并且所有的条件表达式都不成立时,多分支结构的执行入口都没有,此时执行多分支结构下面的语句
第二:如果有else,则当所有条件表达式都不成立时则默认执行else代码块
对应流程图:
其中对于表达式的判断,必须是表达式1为false,才能去判断表达式2
如此循环直至找到对应的入口(如果没有入口则直接执行后续语句块)
当然,一般来说多分支结构都会存在else的条件判断
嵌套分支
基本语法:
if(表达式1){
if(表达式1-1){
if(表达式1-1-1){
}else if(表达式1-1-2){
}
}else{
... if - else
}
}
总的来说,就是在判断结构中再加判断(里面加入的条件分支结构可以是任一种分支结构)
打个比方,某个数字a 第一次判断是否大于20,如果成立则进一步判断是否大于50... ...
嵌套循环:建议不要超过三层(超过三层可读性太差)
对应流程图:
switch 分支结构
基本语法:
switch(表达式){
case 常量1 :
break;
case 常量2 :
break;
...
default 语句块;
break;
}
switch分支结构使用要注意以下几点
1. 表达式的数据类型应该与case后常量数据类型一致或者是可以自动转换的类型
2. switch(表达式) 中表达式的返回值必须是byte、short、int、char、enum、String
3. 如果没写break就会从匹配到的语句开始顺序执行(中间不进行判断直接穿透执行)
流程图如下:
从执行流程上来看 switch分支结构和 if - else if分支结构较为相似
那么具体什么情况应该选取?
1. 判断的具体数值不多,而且符合switch的六种类型建议switch
2. 其他情况如 区间判断等 则用 if - else if更好
循环控制
for循环
基本语法:
for(循环变量初始化 ; 循环条件 ; 循环变量迭代){
循环操作
}
循环执行的流程:
使用细节和注意事项:
1. for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略
2. 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开
while 循环控制
基本语法:
循环变量初始化;
while(循环条件){
循环体;
循环变量迭代;
}
本质上跟for循环没有区别,流程图略
do..while 循环控制
基本语法:
循环变量初始化;
do{
循环体;
循环变量迭代;
}while(循环条件);
流程图:
do-while循环跟while循环相对最大区别:
do-while循环至少执行了一次 ,是先执行,再判断
而while循环则是先判断再执行
注意:do-while循环最后一个分号不能忘记
多重循环控制
循环里面嵌套循环
举例
for(int i = 0;i < 7; i++){ //外层循环7次
for(int j = 0;j < 2; j++ ){ //内层循环2次
// 循环体
}
}
但从实质上讲,内存循环就是外层循环的循环体
只要当内存循环执行结束才能跳出外层的一层循环,继续进行下一轮循环
建议:多重循环一般两层,最多不要超过三层
跳转控制语句
break
说明:用来终止某个语句块的执行,一般用在switch分支结构 或 循环当中
使用细节:
break 如果出现在多层嵌套循环中,可以通过 标签 来指明推出那一层循环
最后输出结果 j = 4, i = 3
continue
说明:
1. continue 用来结束本次循环,继续执行下次循环
2. continue 出现在嵌套循环中也可以用过跟break - label的语法,去选择跳过那层循环
return
说明:
1. return一般使用在方法里面,表示跳出方法
2. 如果在main方法中使用,则直接结束程序