20260709-流程控制与循环结构.md 5.1 KB

Java 流程控制与循环结构 — 学习笔记

日期: 2026/07/09
作者: WanJl


一、分支结构 — if...else

1. 单分支(只有 if

if (条件) {
    // 条件为 true 时执行
}
  • 条件为 true 执行代码块,否则跳过。

2. 双分支(if...else

if (条件) {
    // true
} else {
    // false
}

3. 嵌套 if

if (条件1) {
    if (条件2) {
        // 条件1 && 条件2 成立
    } else {
        // 条件1 成立,条件2 不成立
    }
} else {
    // 条件1 不成立
}

4. if...else if...else 结构

if (条件1) {
    // 条件1 成立
} else if (条件2) {
    // 条件1 不成立,条件2 成立
} else {
    // 全部不成立
}

注意事项

  • 字符串比较应使用 equals() 方法,== 比较的是引用地址,而非内容。

二、循环结构

1. for 循环

for (初始化变量; 循环条件; 变量更新) {
    // 循环体
}

执行流程

  1. 初始化循环变量(仅执行一次)
  2. 判断循环条件 → true 执行循环体,false 跳出
  3. 执行循环体
  4. 执行变量更新,跳回第 2 步

2. while 循环

初始化变量;
while (循环条件) {
    // 循环体
    // 变量更新;
}
  • 先判断后执行,可能一次都不执行。

3. do...while 循环

初始化变量;
do {
    // 循环体
    // 变量更新;
} while (循环条件);
  • 先执行后判断,至少执行一次。

4. 三种循环对比

循环类型 特点 最少执行次数
for 初始化/条件/更新集中管理 0 次
while 先判断后执行 0 次
do...while 先执行后判断 1 次

三、自增/自减运算符

int a = 5;
++a;    // 前自增:先自增再使用
a++;    // 后自增:先使用再自增

四、循环应用 — 数字处理(while 实践)

1. 统计整数位数(Demo03)

int number = 12345;
int count = 0;
while (number != 0) {
    number /= 10;   // 每次除以 10,去掉一位
    count++;        // 位数 +1
}
// 输出:5

2. 求各位数字之和(Demo04)

int number = 12345;
int sum = 0;
while (number != 0) {
    sum += number % 10;   // 取个位累加
    number /= 10;         // 去掉个位
}
// 1+2+3+4+5 = 15

3. 数字反转(Demo05)

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)

*
**
***
****
*****
for (int i = 1; i <= 5; i++) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

2. 倒直角三角形(Demo07)

*****
****
***
**
*
for (int i = 1; i <= 5; i++) {
    for (int j = 5; j >= i; j--) {
        System.out.print("*");
    }
    System.out.println();
}

3. 空心矩形(Demo08)

*****
*   *
*   *
*   *
*****
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)

  *
 ***
*****
 ***
  *
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)