Java 流程控制语句 完整笔记
一、流程控制结构分类
顺序结构
从上到下,依次执行,是程序默认执行方式。
分支结构
根据条件判断,选择不同执行路径。
关键字:if、switch。
循环结构
重复执行某段代码,直到满足终止条件。
关键字:for、while、do-while。
二、分支结构:if 语句的三种结构
1. 单分支结构
if (关系表达式) {
语句体;
}
-
注意事项:
-
关系表达式的返回值类型只能为布尔类型
// if条件判断语句
//if的条件表达式必须是布尔类型,不能是其他类型
if(true){
System.out.println("条件表达式为true");//成功运行
}
else {
System.out.println("条件表达式为false");
} -
关系表达式的返回值为 true 时执行,false 跳过。
-
含有运算符和操作数的式子叫做表达式,含有关系运算符和逻辑运算符的表达式的返回值类型为布尔类型
-
语句体只有一行时,{} 可省略,但不推荐,因为容易出错,例如:int a=0相当于两行代码;
-
布尔变量判断:直接写 if(flag),不要写 if(flag == true)。可以运行但没必要
2. 双分支结构
if (关系表达式) {
语句1;
} else {
语句2;
}
- 二选一执行。
3. 多分支结构
if (关系表达式1) {
语句1;
} else if (关系表达式2) {
语句2;
} else {
语句n;
}
-
从上到下依次判断执行,只执行第一个匹配条件。
int a = 15;
if (a > 1) {
System.out.println("a大于15");//只执行此处代码块
} else if (a > 2) {
System.out.println("a等于15");
} else {
System.out.println("a小于15");
} -
if适合对范围进行判断。
if 补充注意事项
- if 后的{}不要加分号,否则逻辑失效。
- 条件里是判断 ==,不是赋值 =。
- else 不能单独存在,必须跟在 if/else if 后。
三、分支结构:switch 语句
1. 基本格式
switch (表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
default:
语句体n;
break;
}
2. 表达式支持接收的类型
- 基本类型:byte、short、char、int
- 引用类型:String(Java 7+之后有)、枚举 enum
3. 注意事项
-
case 后必须是常量 / 字面量,不能重复。
-
break 用于跳出 switch,省略会发生 case 穿透。
-
default 所有 case 不匹配时执行,位置任意可以放到任意位置,建议放最后,阅读时比较舒服。
-
可利用穿透让多个 case 执行同一逻辑。
/*
1.case后面只能是整数类型,字符类型,字符串类型,枚举类型.不能是浮点数类型和布尔类型
2.case后面只能是常量表达式,不能是变量表达式
3.case后面不能重复,不能有两个case分支的值相同,否则会发生编译错误4.case穿透现象:
switch语句中每个case分支后面必须有break语句,否则会发生穿透现象,
即执行完当前case分支后
会继续执行下一个case分支,直到遇到break语句或者switch语句结束
即:缺少break将导致case穿透一直执行下去,直到遇到break或者switch结束5.default分支是可选的,可以没有default分支,如果没有default分支,
当switch语句中没有匹配的case分支时,
程序将继续执行switch语句后面的代码*/
int b = 2 ;
switch (b) {
case 1:
{ System.out.println("b等于1");}//不执行case 2:
System.out.println("b等于2");//执行完case2后没有break语句,继续执行case3case 3:
System.out.println("b等于3");//执行完case3后没有break语句,继续执行defaultdefault:
System.out.println("b不等于1,2,3");//执行完default后switch语句结束}
-
switch 不能判断 boolean,因为switch(表达式)接收的是一个特殊的值,类型限制。同时Switch是值匹配的工具,而布尔类型是为逻辑判断服务的。
if 与 switch 对比
- if:适合对范围、复杂条件判断。
- switch:适合固定离散值匹配,把有限的数据一一列举出来,选择其一。
四、循环结构
1. for 循环(知道循环次数)
for (初始化语句; 条件判断; 条件更新) {
循环体;
}
-
for(int i=0;i<=10;i++),不一定非要是i++,改成2i之类的i的迭代就行,i<=0:关系运算符和操作数组成的表达式,返回值为布尔类型
for(int i=1;i<5;i=2*i){//for循环,i=2*i每次循环i的值翻倍
//for循环的三个部分:初始化表达式,循环条件表达式,迭代表达式
//并不一定都是i++,也可以是i=2*i,i=i+2等
System.out.println("i="+i);
} -
初始化只执行一次。
-
条件为 true 执行循环体。
-
循环内定义的变量,外部无法访问。
2. while 循环(不确定次数,只知道终止条件时使用)
初始化语句;
while (条件判断) {
循环体;
条件更新;
}
- 先判断,后执行。
- 可能一次都不执行。
3. do-while 循环(至少执行一次)
初始化语句;
do {
循环体;
条件更新;
} while (条件判断);
- 先执行一次,再判断。
- 循环体至少执行一次。
三种循环对比
| for | 先判断后执行 | 确定次数 |
| while | 先判断后执行 | 不确定次数 |
| do-while | 先执行后判断 | 至少执行一次 |
五、跳转控制语句
-
break
结束整个循环 /switch,跳出当前所在层。
-
continue
结束本次循环,跳过剩余语句,直接进入下一次判断。
只能用于循环,不能用于 switch。
六、键盘输入 Scanner
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.close();
}
}



