3. Java程序流程控制(重点)
3.1 分支结构 if, switch
3.1.1 if
- if 分支
- if分支应用场景
- if 第一种形式
- 执行流程:
- 首先判定条件表达式的结果,如果为true执行语句体,为false就不执行语句体。
- if 第二种形式
- 执行流程:
- 首先判定条件表达式的结果,如果为true执行语句体1,为 false 就执行语句体2。
- if 第三种形式
- 执行流程:
- 先判定条件1的值,如果为true则执行语句体1,分支竣事;如果为false则判定条件2的值
- 如果值为true就执行语句体2,分支竣事;如果为false则判定条件3的值
- ...
- 如果没有任何条件为true,就执行else分支的语句体n+1。
- 总结
- if分支的作用是什么?
可以根据条件,选择执行某段程序
- if分支的写法有几种?
- 多学一招: if使用的几个常见问题
- 如果if语句的{}中只有一行代码的环境,{}可以省略不写(但是不推荐省略).
- if(条件){},()后不能跟“;”否则{}中的代码将不受if的控制了.
- 训练: 用户登录
- package com.itheima.a_if;
- import java.util.Scanner;
- /**
- * @author: LXHYouth
- * @date: 2024/3/3 11:39
- * @description:
- */
- /*
- if 案例: 用户登录
- 需求: 键盘录入用户名和密码
- 如果用户名不是1, 程序输出:用户名错误
- 如果密码不是2, 程序输出:密码错误
- 如果用户名和密码没问题, 程序输出:登录成功
- 提示:
- 使用Scanner接收用户输入的信息,并使用变量接收
- 使用if...else if...else 组织程序逻辑
- */
- public class Demo03 {
- public static void main(String[] args) {
- // 1. 创建一个自己的扫描器
- Scanner sc= new Scanner(System.in);
- // 2.提示用户输入用户名
- System.out.print("请输入用户名: ");
- int name = sc.nextInt();
- // 提示用户输入密码
- System.out.print("请输入密码: ");
- int passWord= sc.nextInt();
- if(name!=1){
- System.out.println("用户名错误!!!");
- }else if(passWord!=2){
- System.out.println("密码错误!!!");
- }else{
- System.out.println("登录成功!!!");
- }
- }
- }
复制代码 3.1.2 switch
- switch分支
- switch分支的执行流程
- 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
- 与哪个case后的值匹配为true就执行哪个case块的代码,碰到break就跳出switch分支。
- 如果全部case后的值与之匹配都是false,则执行default块的代码。
- if跟switch的比较
- if适合做区间匹配,功能更加强大.
- switch适合做值匹配,性能更好.
- 总结:
- switch分支的格式、执行流程是怎么样的?
- if、switch的区别有哪些?
- if适合做区间匹配,功能更加强大.
- switch适合做值匹配,性能更好.
3.1.3 switch使用时注意事项
- 使用switch分支的几点注意事项
- 表达式范例只能是byte、short、int、char,JDK5开始支持罗列,JDK7开始支持String,不支持double、float、long。
- case给出的值不答应重复,且只能是字面量,不能是变量。
- 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
- 当case中没有写break时,就会开启穿透,后续的case不再匹配,直接执行, 直到碰到下一个break或者整个switch执行完毕后才竣事, 穿透现象是可以加以利用, 优化代码的.
3.1.4 总结
- 表达式范例可以是byte、short、int、char、罗列、String,不能是double、float、long
- case给出的值不答应重复,且只能是字面量,不能是变量.
- 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
- 存在多个case分支的代码是一样时,可以把代码写到一个case块,其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。
- package com.itheima.b_switch;
- import java.util.Scanner;
- /**
- * @author: LXHYouth
- * @date: 2024/3/3 11:39
- * @description:
- */
- /*
- 分支结构 switch
- 1. 使用待匹配的值去匹配对应的case值, 执行对应的语句体, 遇到break就结束switch语句
- 2. 所有的case都匹配不到,则执行default中的语句体
- switch(待匹配的值){
- case 值1:
- 语句体1;
- break;
- case 值2:
- 语句体2;
- break;
- ....
- case 值n:
- 语句体n;
- break;
- default:
- 语句体;
- break;
- }
- */
- /*
- switch注意事项:
- 1. 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。
- 2. case给出的值不允许重复,且只能是字面量,不能是变量。
- 3. 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
- switch的case穿透
- 当case中没有写break时,就会开启穿透,后续的case不再匹配,直接执行,直到遇到下一个break或者整个switch执行完毕后才结束
- 穿透现象是可以加以利用, 优化代码的
- */
- public class Demo01 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- //需求: 根据今天星期几, 判断是工作还是休息
- System.out.print("请输入今天星期几: ");
- int weekDay= sc.nextInt();
- switch(weekDay){
- 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("输入错误!!!");
- }
- //需求: 根据定义的月份month,输出对应的季节
- // 3、4、5:春季
- //6、7、8:夏季
- //9、10、11:秋季
- //其它 : 输入月份有误
- // 如果发现上下有多个case下的代码完全能相同, 可以利用穿透现象进行简写,只写最后一个case里的代码
- System.out.print("请输入月份: ");
- int month = sc.nextInt();
- switch(month){
- case 12:
- case 1:
- case 2:
- System.out.println("现在是冬季");
- break;
- case 3:
- case 4:
- case 5:
- System.out.println("现在是春季");
- break;
- case 6:
- case 7:
- case 8:
- System.out.println("现在是夏季");
- break;
- case 9:
- case 10:
- case 11:
- System.out.println("现在是秋季");
- break;
- default:
- System.out.println("输入月份有误!!!");
- }
- }
- }
复制代码 3.2 循环结构 for, while, do-while
3.2.1 for循环
- for(初始化语句 ; 条件判断语句; 条件变更语句 ) {
- 循环体语句 ; //要重复执行的代码
- }
复制代码 [code]// 输出3次hello worldfor ( int i = 1; i |