【Java基础|Day03】流程控制语句

文章目录

  • 今日学习目标
  • 第一部分:控制流程概述
  • 第二部分:分支结构详解
    • 2.1 if 语句
      • 2.1.1 基本格式与执行流程:
      • 2.1.2 重要注意事项:
    • 2.2 switch语句
      • 2.2.1 基本格式与执行流程:
      • 2.2.2 重要注意事项:
    • 2.3 分支结构对比
  • 第三部分:循环结构详解
    • 3.1 for循环
    • 3.2 while循环
    • 3.3 do..while循环
    • 3.4 循环结构对比

今日学习目标

  1. 理解程序控制流程的三种基本结构:顺序、分支和循环
  2. 掌握if语句的三种格式及其执行流程
  3. 掌握switch语句的格式与执行流程,理解case穿透及其应用
  4. 掌握for循环的格式与执行流程
  5. 掌握while循环的格式与执行流程
  6. 掌握do-while循环的格式与执行流程
  7. 能够根据实际需求选择合适的控制结构(分支或循环)来解决问题。

第一部分:控制流程概述

程序控制流程分为三大类:

结构类型 描述 Java语法 适用场景
顺序结构 默认执行流程,代码按编写顺序自上而下依次执行 无特殊语法 所有程序的基础流程
分支结构 根据不同条件选择执行不同代码块 if, switch 条件判断、多路选择
循环结构 重复执行特定代码块直到条件不满足 for, while, do-while 重复操作、遍历数据

第二部分:分支结构详解

2.1 if 语句

2.1.1 基本格式与执行流程:

格式一:单分支结构—如果条件成立就执行代码语句

        if(关系表达式){
            语句体;
        }

执行流程

  1. 先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体
  3. 如果关系表达式的值为false就不执行语句体
  4. 继续执行后续代码

开始

条件为真?

执行代码块

后续代码

格式二:双分支结构—如果条件成立就执行代码语句1,否则就执行代码语句2

        if(关系表达式){
            语句体1;
        }else{
            语句体2;
        }

执行流程

  1. 先计算关系表达式的值
  2. 如果关系表达式的值为true就执行语句体1
  3. 如果关系表达式的值为false就执行语句体2
  4. 继续执行后续代码

开始

条件为真?

语句体1

后续代码

语句体2

格式三:多分支结构—存在多种不同情况执行对应情况的语句体

        if(关系表达式1){
            语句体1;
        }else if(关系表达式2){
            语句体2;
        }
        ...
        else{
            语句体;
        }

执行流程

  1. 先计算关系表达式1的值
  2. 如果关系表达式1的值为true就执行语句体1,如果为false就计算关系表达式2的值
  3. 如果关系表达式2的值为true就执行语句体2,如果为false就计算关系表达式3的值
  4. 如果所有关系表达式结果都为false,就执行else后的语句
  5. 继续执行后续代码

开始

条件1?

块1

条件2?

块2

条件n?

块n

else块

后续代码

2.1.2 重要注意事项:

  1. 布尔变量的简洁写法:对于一个布尔量,尽量不要用" == "来判断,直接写在括号中即可
public class Day03 {
    public static void main(String[] args) {
        boolean b = 10>3;
        if(b) { // 而不是b==true
            System.out.println("hello world");
        }
    }
}
  1. 执行顺序特性:if 结构中,条件判断从上到下进行,一旦某个条件满足,执行对应代码块后立即退出,不再检查后续条件。
public class Day03 {
    public static void main(String[] args) {
        int a = 10;
        if(a>0){
            System.out.println("a>0"); //输出:a>0
        }else if(a>5){// 不再检查此条件
            System.out.println("a>5");
        }
    }
}
  1. 代码规范建议:
    • 只有一行代码时,我们可以省略花括号的书写,但是我们一般建议不要省略
    • 左大括号放在行尾,右大括号单独一行
    • else 子句是可选的,当不需要处理所有条件都不满足的情况时,可以省略。

2.2 switch语句

2.2.1 基本格式与执行流程:

        switch(表达式){
            case1:
                语句体1;
                break;
            case2:
                语句体2;
                break;
            ...
            default:
                语句体n;
                break;
        }

执行流程:

  1. 先计算表达式的值
  2. 依次和case后面的值比较,如果有对应值,就会执行相应语句,在执行过程中如果有break就会结束
  3. 如果所有case后面的值与表达式的值都不匹配,就会执行default里面的语句,然后结束整个switch语句

开始

计算表达式值

匹配 case 值1?

执行语句体1

执行 break

结束switch

匹配 case 值2?

执行语句体2

执行 break

匹配其他case?

执行对应语句体

执行 break

执行 default 语句体n

执行 break

后续代码

2.2.2 重要注意事项:

  1. 格式语法说明:
组成部分 说明 注意事项
表达式 任何能计算出确定值的代码片段 类型限制:byte、short、int、char、枚举(JDK5+)、String(JDK7+)
case 与表达式比较的值 不能重复,不能使用变量
break 中断switch语句,阻止case穿透 可选,但通常需要。省略会导致case穿透
default 所有case都不匹配时执行 可省略,可以放在任意位置,建议放在最后

一些表达式示例:

// 简单变量
int score = 85;
switch (score) { ... }
// 运算表达式
switch (score * 2 + 10) { ... }
// 方法调用(方法必须返回有效类型)
int getScore() { return 85; }
switch (getScore()) { ... }
// 三元表达式
switch (score >= 60 ? 1 : 0) { ... }
  1. case的穿透性:
  • 什么是case的穿透性?
    当某个 case 匹配成功后,如果没有遇到 break,程序会继续执行后续 case 的代码块,而不管这些 case 的条件是否匹配,直到遇到break或switch结束。
  • 穿透应用场景:多个case的语句体重复了,可以使用case穿透简化代码。
public class Day03 {
    public static void main(String[] args) {
        int day = 1;
        switch (day) {
            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;
        }
        // 利用case的穿透性简化:
        switch(day){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        // 还可以进一步简化:
        switch(day){
            case 1, 2, 3, 4, 5:
                System.out.println("工作日");
                break;
            case 6,7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("输入错误");
                break;
        }
        // JDK 12+ 箭头语法:(自动break,不需要写break)
        switch(day) {
            case 1, 2, 3, 4, 5 -> {
                System.out.println("工作日");
            }
            case 6, 7 -> {
                System.out.println("休息日");
            }
            default -> {
                System.out.println("输入错误");
            }
        }
    }
  • 跳转控制语句:
语句 在switch中的作用 在循环中的作用
break 结束整个switch语句 结束整个循环
continue 不可用 跳过本次循环剩余代码,继续下一次循环

2.3 分支结构对比

特性 if语句 switch语句
判断类型 条件表达式 等值比较
适用场景 1. 条件为范围
2. 条件为布尔表达式
3. 条件数量较少或不确定
1. 基于单个变量的多个固定值
2. 枚举类型选择
3. 字符串常量匹配

总结建议:

  • 使用if语句:适合条件判断涉及范围、布尔逻辑、复杂条件
  • 使用switch语句:适合基于单个变量与多个固定值进行等值匹配

第三部分:循环结构详解

3.1 for循环

格式

        for(初始化语句;条件表达式;条件控制语句){
            循环体;
        }

执行流程

  1. 执行初始化语句
  2. 执行条件表达式,如果是true,执行循环体;如果是false,结束循环
  3. 执行条件控制语句
  4. 再执行2

开始循环

执行初始化语句

条件表达式
是否为真?

执行循环体

执行条件控制语句

结束循环
继续后续代码

3.2 while循环

格式

        初始化语句 ;
        while(条件表达式){
            循环体 ;
            条件控制语句 ;
        }

执行流程

  1. 执行初始化语句
  2. 执行条件表达式,如果是true,执行循环体;如果是false,结束循环
  3. 执行条件控制语句
  4. 再执行2

开始循环

执行初始化语句

条件表达式
是否为真?

执行循环体

执行条件控制语句

结束循环
继续后续代码

3.3 do…while循环

格式

        初始化语句 ;
        do{
            循环体 ;
            条件控制语句 ;
        }while(条件表达式);

执行流程

  1. 执行初始化语句
  2. 执行循环体语句
  3. 执行条件控制语句
  4. 执行条件表达式判断,如果为 true,回到第 2 步继续执行;如果为 false,结束循环
  5. 继续执行后续代码

开始循环

执行初始化语句

执行循环体语句

执行条件控制语句

条件表达式
是否为真?

结束循环
继续后续代码

3.4 循环结构对比

do…while:无论如何都会无条件执行一次循环体,再开始进行判断是否继续循环。
for和while流程一致,有何区别?
for循环一般用于已知的循环次数或者循环范围的场景
while循环一般用于已知的开始结束循环条件的场景,而不知道循环次数。

特性 for循环 while循环 do-while循环
执行次数 0次或多次 0次或多次 至少1次
适用场景 循环次数或者循环范围已知 循环次数未知,知道开始结束循环的条件 需要至少执行一次的场景

以上为个人学习总结,旨在梳理个人理解。如有疏漏或不当之处,欢迎指正与交流。

© 版权声明

相关文章