Просмотр исходного кода

docs: 更新20260715课堂笔记,追加Demo03循环控制语句及流程控制陷阱

- 新增 Demo03.java(break / continue / return 结束循环的三种方式)
- 更新 Demo02.java(追加浮点精度陷阱、switch穿透利用示例)
- 更新笔记:增加循环控制语句(break/continue/return)章节
- 更新笔记:增加流程控制常见陷阱(浮点精度、switch穿透)
- 更新笔记完整代码汇总、随堂练习要点、拓展阅读
WanJL 2 дней назад
Родитель
Сommit
6f61053e9e

+ 20 - 0
授课代码/c260715/src/Demo02.java

@@ -55,5 +55,25 @@ public class Demo02 {
         /*
             练习:分别使用for、while和do...while 循环1~100之间的整数。
          */
+        // 流程控制中的陷阱
+        //1、浮点类型精度问题
+        double a=0.1+0.2;
+        System.out.println(a);
+        if (a==0.3){
+            System.out.println("相等");
+        }else {
+            System.out.println("不想等");
+        }
+
+        //2、switch的穿透问题
+        // 如果不加break,case1和case2都会穿透到case3
+        int x=2;
+        switch (x){
+            case 1:
+            case 2:
+            case 3:
+                System.out.println("1~3");
+                break;
+        }
     }
 }

+ 44 - 0
授课代码/c260715/src/Demo03.java

@@ -0,0 +1,44 @@
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo03
+ * @description 结束循环的语句
+ * @create 2026/7/15
+ */
+public class Demo03 {
+    public static void main(String[] args) {
+        /*
+            有3种方式可以结束循环
+            break;  结束循环,继续执行循环后面的代码
+            continue;   结束本轮循环,继续执行下一轮循环。
+            return; 结束方法,顺便结束循环
+         */
+        for (int i = 0; i < 10; i++) {
+            if (i==3){
+                continue;   //i==3的时候,结束本轮循环,也就是不执行输出语句了,继续执行下一轮循环
+            }
+            System.out.println(i);
+        }
+        System.out.println("---------------------------------------");
+        for (int i = 0; i < 10; i++) {
+            if (i==3){
+                break;  //i==3的时候,结束循环,继续执行循环外的代码
+            }
+            System.out.println(i);
+        }
+        System.out.println(".....循环后的代码....");
+        System.out.println("---------------------------------------");
+        for (int i = 0; i < 10; i++) {
+            if (i==3){
+                return;  //i==3的时候,结束方法,顺便结束循环,循环后面的代码也不执行了
+            }
+            System.out.println(i);
+        }
+        System.out.println(".....循环后的代码....");
+        System.out.println(".....循环后的代码....");
+        System.out.println(".....循环后的代码....");
+        System.out.println(".....循环后的代码....");
+        System.out.println(".....循环后的代码....");
+
+    }
+}

+ 190 - 2
课堂笔记/01-JavaSE基础-笔记/20260715-笔记.md

@@ -274,6 +274,107 @@ do {
 
 ---
 
+### 5. 循环控制语句(结束循环的三种方式)
+
+Java 提供了三种方式控制循环的执行流程:
+
+| 控制语句 | 作用 | 说明 |
+|---------|------|------|
+| **`break`** | 结束整个循环 | 跳出循环体,继续执行循环后面的代码 |
+| **`continue`** | 结束本轮循环 | 跳过本次循环剩余代码,继续执行下一轮循环 |
+| **`return`** | 结束整个方法 | 直接结束当前方法,方法中循环后面的代码也不再执行 |
+
+#### ① break — 结束整个循环
+
+```java
+for (int i = 0; i < 10; i++) {
+    if (i == 3) {
+        break;  // i == 3 时结束整个循环
+    }
+    System.out.println(i);
+}
+// 输出:0 1 2
+// 循环到此结束,继续执行循环外的代码
+System.out.println(".....循环后的代码....");
+```
+
+> `break` 执行后,循环立即终止,程序继续执行循环后面的代码。
+
+#### ② continue — 结束本轮循环
+
+```java
+for (int i = 0; i < 10; i++) {
+    if (i == 3) {
+        continue;  // i == 3 时跳过本轮,不执行输出
+    }
+    System.out.println(i);
+}
+// 输出:0 1 2 4 5 6 7 8 9
+// 注意:没有 3,因为 i==3 时跳过了本次循环
+```
+
+> `continue` 执行后,本轮循环中剩余的代码不再执行,直接进入下一轮迭代(i++ → 判断条件)。
+
+#### ③ return — 结束整个方法
+
+```java
+for (int i = 0; i < 10; i++) {
+    if (i == 3) {
+        return;  // i == 3 时结束方法,循环后面的代码也不执行了
+    }
+    System.out.println(i);
+}
+// 输出:0 1 2
+// 注意:循环后面的所有代码都不会执行
+System.out.println(".....循环后的代码....");  // ❌ 不会执行
+```
+
+> `return` 比 `break` 更"狠"——它不仅结束循环,还会直接结束整个 `main` 方法,方法内循环后面的所有代码都不再执行。
+
+#### 三种控制语句对比
+
+| 控制语句 | 影响范围 | 循环剩余代码 | 循环外代码 | 适用场景 |
+|---------|---------|------------|-----------|---------|
+| **`break`** | 仅当前循环 | 不执行 | 继续执行 | 找到目标后提前退出循环 |
+| **`continue`** | 仅本轮循环 | 不执行(跳到下一轮) | 继续执行 | 跳过某些不符合条件的值 |
+| **`return`** | 整个方法 | 不执行 | 不执行 | 方法执行完毕或异常提前返回 |
+
+---
+
+### 6. 流程控制中的常见陷阱
+
+#### ① 浮点类型精度问题
+
+```java
+double a = 0.1 + 0.2;
+System.out.println(a);   // 0.30000000000000004
+if (a == 0.3) {
+    System.out.println("相等");
+} else {
+    System.out.println("不想等");
+}
+// 输出:不想等
+```
+
+> **原因**:浮点数采用 IEEE 754 标准存储,`0.1 + 0.2` 在计算机中无法精确表示为 `0.3`,而是近似值 `0.30000000000000004`。
+
+#### ② switch 的穿透问题
+
+```java
+int x = 2;
+switch (x) {
+    case 1:
+    case 2:
+    case 3:
+        System.out.println("1~3");
+        break;
+}
+// 输出:1~3
+// 如果 case 1、case 2 不加 break,会一直穿透到 case 3
+```
+
+> **穿透技巧**:当多个 case 需要执行相同的代码时,可以利用穿透特性,只在最后一个 case 写 `break`,减少重复代码。
+
 ## 三、课后作业讲解(7月14日作业)
 
 ### 题目 1:判断闰年
@@ -647,7 +748,7 @@ public class Demo01 {
 }
 ```
 
-### Demo02.java — 循环结构
+### Demo02.java — 循环结构 + 流程控制陷阱
 
 ```java
 /**
@@ -688,7 +789,83 @@ public class Demo02 {
                 do...while 至少执行一次循环体
          */
 
-        // 练习:分别使用 for、while 和 do...while 循环 1~100 之间的整数
+        // ========== 流程控制中的陷阱 ==========
+
+        // 陷阱 1:浮点类型精度问题
+        double a = 0.1 + 0.2;
+        System.out.println(a);   // 0.30000000000000004
+        if (a == 0.3) {
+            System.out.println("相等");
+        } else {
+            System.out.println("不想等");
+        }
+
+        // 陷阱 2:switch 的穿透问题
+        // 如果不加 break,case 会一直穿透
+        int x = 2;
+        switch (x) {
+            case 1:
+            case 2:
+            case 3:
+                System.out.println("1~3");
+                break;
+        }
+    }
+}
+```
+
+### Demo03.java — 循环控制语句(break / continue / return)
+
+```java
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo03
+ * @description 结束循环的语句
+ * @create 2026/7/15
+ */
+public class Demo03 {
+    public static void main(String[] args) {
+        /*
+            有 3 种方式可以结束循环
+            break;      结束循环,继续执行循环后面的代码
+            continue;   结束本轮循环,继续执行下一轮循环
+            return;     结束方法,顺便结束循环
+         */
+
+        // ===== continue:结束本轮循环 =====
+        for (int i = 0; i < 10; i++) {
+            if (i == 3) {
+                continue;   // i==3 时跳过本轮,不输出 3
+            }
+            System.out.println(i);
+        }
+        // 输出:0 1 2 4 5 6 7 8 9
+
+        System.out.println("---------------------------------------");
+
+        // ===== break:结束整个循环 =====
+        for (int i = 0; i < 10; i++) {
+            if (i == 3) {
+                break;      // i==3 时结束整个循环
+            }
+            System.out.println(i);
+        }
+        // 输出:0 1 2
+        System.out.println(".....循环后的代码....");
+
+        System.out.println("---------------------------------------");
+
+        // ===== return:结束整个方法 =====
+        for (int i = 0; i < 10; i++) {
+            if (i == 3) {
+                return;     // i==3 时结束方法,循环后的代码也不执行
+            }
+            System.out.println(i);
+        }
+        // 输出:0 1 2
+        // 以下代码不会执行!
+        System.out.println(".....循环后的代码....");
     }
 }
 ```
@@ -719,6 +896,12 @@ public class Demo02 {
 20. **作业-数字加密**:取每位 → 加5 → 取余10 → 位置互换
 21. **变量交换**:可使用加减法实现不借助第三变量的交换
 22. **进制表示**:`0b` 二进制、`0` 八进制、`0x` 十六进制
+23. **循环控制语句**:`break` 结束整个循环,`continue` 结束本轮循环,`return` 结束整个方法
+24. **`break`**:跳出当前循环体,继续执行循环后面的代码
+25. **`continue`**:跳过本轮循环中剩余代码,直接进入下一轮迭代
+26. **`return`**:直接结束整个方法,方法内循环后的所有代码都不再执行
+27. **浮点精度陷阱**:`0.1 + 0.2` 不等于 `0.3`,浮点数不能直接用 `==` 比较
+28. **switch 穿透利用**:多个 case 执行相同代码时,可以利用穿透特性只在最后一个 case 写 `break`
 
 ---
 
@@ -738,3 +921,8 @@ public class Demo02 {
 | **整除 `/` 与取余 `%`** | 常用于数字分解,如获取一个整数的各个位上的数字 |
 | **变量交换算法** | 不借助第三个变量,通过加减法或异或运算交换两个变量的值 |
 | **进制前缀** | `0b`(二进制)、`0`(八进制)、`0x`(十六进制) |
+| **`break`** | 结束整个循环,继续执行循环后的代码 |
+| **`continue`** | 结束本轮循环,跳过本轮剩余代码,直接进入下一轮 |
+| **`return`** | 结束当前方法,方法内所有剩余代码都不执行 |
+| **浮点精度** | IEEE 754 标准导致 `0.1 + 0.2 ≠ 0.3`,避免用 `==` 直接比较浮点数 |
+| **switch 穿透** | 不写 `break` 时 case 会穿透到下个 case,可利用此特性合并相同逻辑 |