下载工作台
Java 编程实战

流程控制:条件与循环

试读上半部分 · 解锁后可读全文

第 3 章 · 流程控制:条件与循环

本章目标:熟练使用 if/else if/else 与三元运算符;掌握 switch(含 Java 14+ switch 表达式);熟练 forwhiledo-while 循环;理解 breakcontinue 与带标签跳转;能编写 toolkit-demo 的订单状态判断批量折扣逻辑;对照 python-dev ch03 理解语法差异。

学时建议:3~4 小时(含 1 小时跟练)

前置:完成 java-dev ch02;建议已学 python-dev ch03


3.1 场景说明:订单状态与批量折扣

toolkit-demo 需要根据用户等级与购买数量决定折扣,并遍历订单列表输出状态摘要——逻辑类似 python-dev 中 shop-demo 的订单筛选脚本。

业务规则实现方式
数量 ≥ 10 享 9 折if + 循环累加
VIP 额外 95 折嵌套 ifswitch
状态 PENDING/PAID/CANCELswitch 分支
跳过已取消订单统计continue
遇到非法状态终止break(示例)
learn-java/toolkit-demo/src/main/java/demo/order/
  ├── OrderStatusDemo.java
  └── BulkDiscount.java

3.2 布尔表达式与 if

int quantity = 12;
double total = 980.0;
boolean isVip = true;

if (quantity >= 10 && total > 500) {
    System.out.println("满足大额批发条件");
} else if (quantity >= 5) {
    System.out.println("小批量优惠");
} else {
    System.out.println("标准价格");
}
对比PythonJava
语法冒号缩进() + {}
三元x if c else yc ? x : y
链式elifelse if
double rate = isVip ? 0.95 : 1.0;
String level = (total > 1000) ? "高" : "普通";

注意:Java 中 if (x = 5) 编译错误(赋值非布尔);Python 偶尔误写 if x = 5 也会报错(3.x)。


3.3 switch 语句与表达式

3.3.1 传统 switch(Java 8 风格)

String status = "PAID";
switch (status) {
    case "PENDING":
        System.out.println("待支付");
        break;
    case "PAID":
        System.out.println("已支付");
        break;
    case "CANCEL":
        System.out.println("已取消");
        break;
    default:
        System.out.println("未知状态");
}
类型switch 支持(Java 17)
byte short int char
String✓(Java 7+)
enum✓(ch06 详讲)
long float double

忘记 break 会导致贯穿(fall-through)到下一 case,常见 bug。

3.3.2 switch 表达式(Java 14+,推荐)

String label = switch (status) {
    case "PENDING" -> "待支付";
    case "PAID"    -> "已支付";
    case "CANCEL"  -> "已取消";
    default        -> "未知";
};

int priority = switch (status) {
    case "PENDING" -> 1;
    case "PAID"    -> { yield 2; }  // 复杂块用 yield
    case "CANCEL"  -> 0;
    default        -> -1;
};

箭头语法 -> 默认不贯穿,更安全。

PythonJava
match(3.10+)switch 表达式
无 break 贯穿问题传统 switch 需注意 break

3.4 for 循环

3.4.1 经典 for

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

// 倒序
for (int i = 9; i >= 0; i--) {
    System.out.print(i + " ");
}

3.4.2 for-each(增强 for)

String[] statuses = {"PENDING", "PAID", "CANCEL"};
for (String s : statuses) {
    System.out.println(s);
}
对比PythonJava
for i in range(5)for (int i=0; i<5; i++)
for x in listfor (String x : list)

Java 暂无内置 range(),可用 IntStream.range(ch09)或手写循环。


3.5 while 与 do-while

int retries = 0;
while (retries < 3) {
    System.out.println("重试 " + retries);
    retries++;
}

int choice = 0;
do {
    choice++;
    System.out.println("至少执行一次:" + choice);
} while (choice < 1);
循环先判断后执行至少一次
while可能零次
do-while后判断

3.6 break 与 continue

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;   // 跳过偶数
    }
    if (i > 7) {
        break;      // 结束循环
    }
    System.out.println(i);  // 1,3,5,7
}

3.6.1 带标签的 break(嵌套循环)

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。