|
|
@@ -0,0 +1,281 @@
|
|
|
+# Java 流程控制与循环结构 — 学习笔记
|
|
|
+
|
|
|
+**日期**: 2026/07/09
|
|
|
+**作者**: WanJl
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、分支结构 — `if...else`
|
|
|
+
|
|
|
+### 1. 单分支(只有 `if`)
|
|
|
+
|
|
|
+```java
|
|
|
+if (条件) {
|
|
|
+ // 条件为 true 时执行
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+- 条件为 `true` 执行代码块,否则跳过。
|
|
|
+
|
|
|
+### 2. 双分支(`if...else`)
|
|
|
+
|
|
|
+```java
|
|
|
+if (条件) {
|
|
|
+ // true
|
|
|
+} else {
|
|
|
+ // false
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 3. 嵌套 `if`
|
|
|
+
|
|
|
+```java
|
|
|
+if (条件1) {
|
|
|
+ if (条件2) {
|
|
|
+ // 条件1 && 条件2 成立
|
|
|
+ } else {
|
|
|
+ // 条件1 成立,条件2 不成立
|
|
|
+ }
|
|
|
+} else {
|
|
|
+ // 条件1 不成立
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 4. `if...else if...else` 结构
|
|
|
+
|
|
|
+```java
|
|
|
+if (条件1) {
|
|
|
+ // 条件1 成立
|
|
|
+} else if (条件2) {
|
|
|
+ // 条件1 不成立,条件2 成立
|
|
|
+} else {
|
|
|
+ // 全部不成立
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 注意事项
|
|
|
+
|
|
|
+- **字符串比较**应使用 `equals()` 方法,`==` 比较的是引用地址,而非内容。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、循环结构
|
|
|
+
|
|
|
+### 1. `for` 循环
|
|
|
+
|
|
|
+```java
|
|
|
+for (初始化变量; 循环条件; 变量更新) {
|
|
|
+ // 循环体
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**执行流程**:
|
|
|
+1. 初始化循环变量(仅执行一次)
|
|
|
+2. 判断循环条件 → `true` 执行循环体,`false` 跳出
|
|
|
+3. 执行循环体
|
|
|
+4. 执行变量更新,跳回第 2 步
|
|
|
+
|
|
|
+### 2. `while` 循环
|
|
|
+
|
|
|
+```java
|
|
|
+初始化变量;
|
|
|
+while (循环条件) {
|
|
|
+ // 循环体
|
|
|
+ // 变量更新;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+- **先判断后执行**,可能一次都不执行。
|
|
|
+
|
|
|
+### 3. `do...while` 循环
|
|
|
+
|
|
|
+```java
|
|
|
+初始化变量;
|
|
|
+do {
|
|
|
+ // 循环体
|
|
|
+ // 变量更新;
|
|
|
+} while (循环条件);
|
|
|
+```
|
|
|
+
|
|
|
+- **先执行后判断**,至少执行一次。
|
|
|
+
|
|
|
+### 4. 三种循环对比
|
|
|
+
|
|
|
+| 循环类型 | 特点 | 最少执行次数 |
|
|
|
+|---------|------|------------|
|
|
|
+| `for` | 初始化/条件/更新集中管理 | 0 次 |
|
|
|
+| `while` | 先判断后执行 | 0 次 |
|
|
|
+| `do...while` | 先执行后判断 | 1 次 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、自增/自减运算符
|
|
|
+
|
|
|
+```java
|
|
|
+int a = 5;
|
|
|
+++a; // 前自增:先自增再使用
|
|
|
+a++; // 后自增:先使用再自增
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、循环应用 — 数字处理(while 实践)
|
|
|
+
|
|
|
+### 1. 统计整数位数(Demo03)
|
|
|
+
|
|
|
+```java
|
|
|
+int number = 12345;
|
|
|
+int count = 0;
|
|
|
+while (number != 0) {
|
|
|
+ number /= 10; // 每次除以 10,去掉一位
|
|
|
+ count++; // 位数 +1
|
|
|
+}
|
|
|
+// 输出:5
|
|
|
+```
|
|
|
+
|
|
|
+### 2. 求各位数字之和(Demo04)
|
|
|
+
|
|
|
+```java
|
|
|
+int number = 12345;
|
|
|
+int sum = 0;
|
|
|
+while (number != 0) {
|
|
|
+ sum += number % 10; // 取个位累加
|
|
|
+ number /= 10; // 去掉个位
|
|
|
+}
|
|
|
+// 1+2+3+4+5 = 15
|
|
|
+```
|
|
|
+
|
|
|
+### 3. 数字反转(Demo05)
|
|
|
+
|
|
|
+```java
|
|
|
+int number = 12345;
|
|
|
+int rev = 0;
|
|
|
+while (number != 0) {
|
|
|
+ rev = rev * 10 + (number % 10); // 每次取个位拼接到 rev
|
|
|
+ number /= 10;
|
|
|
+}
|
|
|
+// 输出:54321
|
|
|
+```
|
|
|
+
|
|
|
+**核心思想**:`number % 10` 取个位 → `number / 10` 去掉个位 → 循环直到 0。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、循环应用 — 图形打印(嵌套 for 实践)
|
|
|
+
|
|
|
+### 1. 直角三角形(Demo06)
|
|
|
+
|
|
|
+```
|
|
|
+*
|
|
|
+**
|
|
|
+***
|
|
|
+****
|
|
|
+*****
|
|
|
+```
|
|
|
+
|
|
|
+```java
|
|
|
+for (int i = 1; i <= 5; i++) {
|
|
|
+ for (int j = 0; j < i; j++) {
|
|
|
+ System.out.print("*");
|
|
|
+ }
|
|
|
+ System.out.println();
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 2. 倒直角三角形(Demo07)
|
|
|
+
|
|
|
+```
|
|
|
+*****
|
|
|
+****
|
|
|
+***
|
|
|
+**
|
|
|
+*
|
|
|
+```
|
|
|
+
|
|
|
+```java
|
|
|
+for (int i = 1; i <= 5; i++) {
|
|
|
+ for (int j = 5; j >= i; j--) {
|
|
|
+ System.out.print("*");
|
|
|
+ }
|
|
|
+ System.out.println();
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 3. 空心矩形(Demo08)
|
|
|
+
|
|
|
+```
|
|
|
+*****
|
|
|
+* *
|
|
|
+* *
|
|
|
+* *
|
|
|
+*****
|
|
|
+```
|
|
|
+
|
|
|
+```java
|
|
|
+for (int i = 0; i < 5; i++) {
|
|
|
+ for (int j = 0; j < 5; j++) {
|
|
|
+ if (i == 0 || i == 4) { // 第一行和最后一行
|
|
|
+ System.out.print("*");
|
|
|
+ } else {
|
|
|
+ if (j == 0 || j == 4) { // 第一列和最后一列
|
|
|
+ System.out.print("*");
|
|
|
+ } else {
|
|
|
+ System.out.print(" ");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println();
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**规律**:边框输出 `*`,内部输出空格。
|
|
|
+
|
|
|
+### 4. 菱形(Demo09)
|
|
|
+
|
|
|
+```
|
|
|
+ *
|
|
|
+ ***
|
|
|
+*****
|
|
|
+ ***
|
|
|
+ *
|
|
|
+```
|
|
|
+
|
|
|
+```java
|
|
|
+for (int i = 1; i <= 5; i++) {
|
|
|
+ for (int j = 1; j <= 5; j++) {
|
|
|
+ if (i == 1 || i == 5) { // 第 1、5 行
|
|
|
+ if (j == 3) System.out.print("*");
|
|
|
+ else System.out.print(" ");
|
|
|
+ } else if (i == 2 || i == 4) { // 第 2、4 行
|
|
|
+ if (j == 1 || j == 5) System.out.print(" ");
|
|
|
+ else System.out.print("*");
|
|
|
+ } else { // 第 3 行
|
|
|
+ System.out.print("*");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println();
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、知识总结
|
|
|
+
|
|
|
+| 知识点 | 说明 |
|
|
|
+|-------|------|
|
|
|
+| `if...else` | 分支结构:单分支、双分支、嵌套、`else if` 链 |
|
|
|
+| `for` 循环 | 初始化/条件/更新集中管理,适合固定次数循环 |
|
|
|
+| `while` 循环 | 先判断后执行,适合条件驱动循环 |
|
|
|
+| `do...while` 循环 | 先执行后判断,至少执行一次 |
|
|
|
+| `++i` / `i++` | 前自增(先增后用)、后自增(先用后增) |
|
|
|
+| 数字位运算 | `% 10` 取个位,`/ 10` 去掉个位 |
|
|
|
+| 嵌套循环 | 外层控制行数,内层控制每行内容 |
|
|
|
+| 图形打印规律 | 分析行列索引关系,用条件控制输出内容 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、练习题
|
|
|
+
|
|
|
+1. 使用三种循环分别输出 `1~100`
|
|
|
+2. 使用三种循环分别统计 `1~100` 的和
|
|
|
+3. 统计偶数 `1~100` 的和(参考 Demo02)
|