2.流程控制
1.流程控制分类
1.1 Java程序的执行结构
- 顺序结构:代码从上往下,逐行依次执行。是程序的默认执行结构
- 分支结构:程序在某一个节点遇到了多种向下执行的可能性,根据条件选择一个分支继续执行
- 循环结构:某一段代码需要被重复执行多次
2.分支流程控制-if
2.1 if选择结构
if(布尔表达式){
**代码块**
}
**后续代码**
2.2 if else选择结构★
if(布尔表达式){
**代码块1** //如果代码块1(代码块2)中只有一句代码,则其{}可省 略;但出于规范,一般不省略
}else{
**代码块2**
}
**后续代码**
2.3 多重if选择结构
if(布尔表达式){
**代码块1**
}else if(布尔表达式2){
**代码块2**
}else{
**代码块3**
}
**后续代码**
2.4 嵌套if选择结构
if(外层表达式){
if(内层表达式){
内层代码块1
}else{
内层代码块2
}
}else{
外层代码块
}
3.分支流程控制-switch
3.1 语法
switch(variable){
case 1: 代码块;break;
case 2: 代码块;break;
……
default: 未满足时的代码;break;
}
3.2 基本逻辑
- variable是一个非浮点类型的变量
- 如果variable的值和某一个case匹配成功,则执行这个case后面的代码段
- 如果variable的值和每一个case都不匹配,则执行default后面的代码段
3.3 穿透性
- 当匹配的case被执行后,并不会自动退出整个结构,而是继续向下贯穿执行
- 贯穿执行特性的应用:可避免冗余
- break关键字可在匹配的case执行后执行,直接跳出整个结构
3.4 注意
- case 1 、case 2 、…… 、default的顺序可以互换,不影响执行
- case值不可以重复
4.循环流程控制-for
4.1 语法
for(初始部分 ; 循环条件 ; 迭代部分){
循环部分;
}
4.2 执行流程
- 先执行初始部分(仅执行一次)
- 判断循环条件,若成立,则执行循环体循环体执行完毕后,再执行循环条件
- 直到循环条件结果为false,此处循环结束,退出循环结构
4.3 特殊语法
-
循环小括号内()的每一步都可以省略
for(int i = 1 ; i < 100 ; 1++){ System.out.print(i); }int i = 1; for( ; ; ){ System.out.print(i); i++ if(i < 100){ break; } } -
如果循环体中的代码只有一行,则大括号{}可以省略
5.循环流程控制-while
5.1 语法
while(布尔表达式){
//循环体
}
5.2 执行逻辑
- 当布尔表达式为真时,执行循环体
5.3 for循环与while循环的区别
- for循环:循环次数可预期
- while循环:循环次数不可预期,但有明确的循环结束条件
5.4 do-while循环
do{
循环语句
}while(布尔表达式);
- 无论循环条件是否成立,均会执行一遍循环体
- 适用于首次没有入口条件、循环次数不明确的情况
6.continue、break关键字
6.1 break
- 终止、跳出switch、循环结构(用于循环和switch结构中)
import java.util.Scanner;
/**
*通过控制台输入5个成绩,然后计算平均分;若输出成绩非法,弹出提示,程序结束
*/
public class TestWork1{
public static void main(String[] args){
double sum = 0D;
Scanner input = new Scanner(System.in);
boolean flag = true;//代表成绩合法
for(int i = 1; i <= 5; i++){
System.out.print("请输入第" + i + "个分数:");
double score = input.nextDouble();
if(score > 100 || score < 0){
flag = false;
break;
}
sum += score;
}
if(flag){ //相当于flag == true
double mean = sum/5;
System.out.println("平均分为:" + mean);
}else{
System.out.println("输入成绩有误");
}
}
}
6.2 continue
结束本次并进入下一次循环(只能用于循环语句中)
import java.util.Scanner;
/**
*通过控制台输入5个成绩,然后计算平均分;若输出成绩非法,弹出提示,并可纠正输入
*/
public class TestWork2{
public static void main(String[] args){
double sum = 0D;
Scanner input = new Scanner(System.in);
for(int i = 1; i <= 5; ){ //把迭代部分放到下面
System.out.print("请输入第" + i + "个分数:");
double score = input.nextDouble();
if(score > 100 || score < 0){
System.out.println("输入成绩有误,请重新输入!");
continue;
}
sum += score;
i++;//为了保证出现非法数据时,不影响迭代次数
}
double mean = sum/5;
System.out.println("平均分为:" + mean);
}
}
6.3 循环标签
-
如果关键字写在了嵌套循环语句中,只对当前的循环生效
-
如果希望在内层循环中使用continue、break,使其对外层循环生效,需要用到循环标签,可使关键字作用于标签之内的循环
备注
1.用循环写斐波那契数列
2.用递归写斐波那契数列时,输出前1000个数字,效率太低

浙公网安备 33010602011771号