# 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）
