1、流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,包含顺序结构,分支结构,循环结构。
1.1 顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转,程序中大多数的代码都是这样执行的。
1.2 分支结构
根据不同条件,选择不同的执行路线,最后得到不同的结果。
分支结构包含:单分支结构、双分支结构、多分支结构、switch语句、三元表达式。
场景:
比如登录的时候,我们会输入账号和密码,点击登录,这时候会分两种情况。
当账号密码没有问题,就会进入首页;
当账号密码有问题,就会提示我们账号密码不匹配。
实现这样的效果,就是因为条件不同(两次的账号密码一次是正确的,一次是错误的),执行了不同的代码,最后的效果也不一样。
1.2.1 if语句(单分支)
// 格式
if(关系表达式) {
语句体;
}
其他语句;
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体
③如果关系表达式的值为false就不执行语句体
④继续执行后面其他语句内容
示例:
System.out.println("开始");
int a = 10;
int b = 20;
// 判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if(a == b) {
System.out.println("a等于b");
}
// 判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
int c = 10;
if(a == c) {
System.out.println("a等于c");
}
System.out.println("结束");
1.2.2 if语句(双分支)
// 格式
if (关系表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
①首先计算关系表达式的值
②如果关系表达式的值为true就执行语句体1
③如果关系表达式的值为false就执行语句体2
④继续执行后面的语句内容
示例:
System.out.println("开始");
int a = 10;
int b = 20;
// 判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
if(a > b) {
System.out.println("a的值大于b");
} else {
System.out.println("a的值不大于b");
}
System.out.println("结束");
1.2.3 if语句(多分支)
// 格式
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
} else if (关系表达式3) {
语句体3;
}
…
else {
语句体n+1;
}
执行流程:
①首先计算关系表达式1的值
②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
④如果值为true就执行语句体3;如果值为false就计算关系表达式4的值
⑤...
⑥如果没有任何关系表达式为true,就执行语句体n+1。
示例:
/*
需求:输入一个分数
如果大于等于90,则输出【优秀】
如果大于等于80,小于90,则输出【良好】
如果大于等于60,小于80,则输出【及格】
如果小于60,则输出【不及格】
*/
Scanner scanner = new Scanner(System.in);
double score = scanner.nextDouble();
if(score >= 90) {
System.out.println("优秀");
} else if(score >= 80) {
System.out.println("良好");
} else if(score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
注意事项:
- 多分支结构可以包含多个else if语句
- 最后的else不是必须的
1.2.4 switch语句
// 格式
switch (表达式) {
case 值1:
{
语句体1;
}
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
①首先计算出表达式的值。
②其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
③最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
/*
键盘录入星期数,显示今天的减肥活动(1~7代表周一到周日)。
周一:写写博客
周二:快乐夜跑
周三:上课学习
周四:去“疯狂星期四”
周五:自主学习
周六:打英雄联盟
周日:休息一天
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示星期");
int week = sc.nextInt();
switch (week){
case 1:
System.out.println("写写博客");
break;
case 2:
System.out.println("快乐夜跑");
break;
case 3:
System.out.println("上课学习");
break;
case 4:
System.out.println("去“疯狂星期四”");
break;
case 5:
System.out.println("自主学习");
break;
case 6:
System.out.println("打英雄联盟");
break;
case 7:
System.out.println("休息一天");
break;
default:
System.out.println("输入错误,没有这个星期");
break;
}
注意:不写break会引发case穿透现象,即运行完当前的case之后没有找到break,程序会继续往下执行直到找到break为止。
1.2.5 三元表达式
// 格式
关系表达式 ? 表达式1 :表达式2
执行流程:
根据关系表达式的结果,如果是true,则返回表达式1的值,如果是false,则返回表达式2的值。
示例:
// 需求:输入一个分数,如果分数是大于等于60,则输出【及格】;如果小于60,则输出【不及格】
Scanner scanner = new Scanner(System.in);
double score = scanner.nextDouble();
System.out.println(score >= 60 ? "及格" : "不及格");
ps:switch比较适合做等值判断;if比较适合做区间判断。
1.3 循环结构
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
1.3.1 for循环
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
break;//跳出当前循环
continue;//结束当前次循环,进行下一次
}
执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
// 简单使用
// 打印10个“HelloWorld”
for (int i = 1; i <= 10; i++) {
System.out.println("HelloWorld");
}
1.3.2 while循环
// 格式
初始化语句;
while(条件判断语句){
循环体;
条件控制语句;
}
执行流程:
①初始化语句。
②执行条件判断语句,得到结果。
③如果为false,结束循环。
④如果为true,执行循环体,再执行条件控制语句,继续②。
// 打印10个“HelloWorld”
int i = 1;
while(i <= 10){
System.out.println("HelloWorld");
i++;
}
System.out.println(i);
1.3.3 do...while循环
// 格式
初始化语句;
do{
循环体;
条件控制语句;
}while(条件判断语句);
执行流程:
①初始化语句。
②执行循环体,再执行条件控制语句。
③执行条件判断语句,得到结果。
④如果为false,结束循环。
⑤如果为true,执行循环体,再执行条件控制语句,继续③。
示例:
// 我们平常在修改密码的时候,要求必须先输入,然后保存再判断【新密码】和【确认密码】有没有一致。
// 强调先执行,再判断
Scanner scanner = new Scanner(System.in);
String newPassword = ""; // 新密码
String confirmPassword = ""; // 确认密码
do {
System.out.println("请输入新密码:");
newPassword = scanner.next();
System.out.println("请确认新密码:");
confirmPassword = scanner.next();
// equals用于比较字符串是否相等,后面会讲
if(!newPassword.equals(confirmPassword)) {
System.out.println("两次输入的密码不一致,请重新输入!!");
}
} while (!newPassword.equals(confirmPassword));
System.out.println("操作成功!!!");
1.3.4 continue和break
1.continue
作用:结束本次循环,继续下一次循环。
2break
作用:结束整个循环。
1.3.5 循环总结
- for和while循环,是先判断,再执行。
- do...while是先执行,再判断。
- 当知道循环次数或者循环范围的时候,用for循环。
- 当不知道循环次数,也不知道循环范围,但是知道循环的结束条件时,用while循环。