前言
⛈️ 暴雨预警了,该怎么办?
你有没有遇到过这些困惑?
👉 看到红色暴雨预警,却不知道该不该逃课
👉 写代码时if-else
写得乱七八糟,自己都看不懂
👉 总是把条件顺序搞反,结果总是不如预期
别担心!今天我们用「暴雨预警」这个生活场景,带你轻松掌握if-else
的核心用法。就像背天气口诀一样简单!⛈️
🌟 关于我 | 李工👨💻
深耕代码世界的工程师 | 用技术解构复杂问题 | 开发+教学双重角色
🚀 为什么访问我的个人知识库?
👉 https://cclee.flowus.cn/
✨ 更快的更新 - 抢先获取未公开的技术实战笔记
✨ 沉浸式阅读 - 自适应模式/代码片段一键复制
✨ 扩展资源库 - 附赠 「编程资源」 + 「各种工具包」
🌌 这里不仅是博客 → 更是我的 编程人生全景图🌐
从算法到架构,从开源贡献到技术哲学,欢迎探索我的立体知识库!
一、现实场景
🧭 暴雨等级应对指南
假设我们要根据预警等级做出不同反应:
红色预警 → 停课 + 关闭地铁
橙色预警 → 取消户外活动
黄色预警 → 提醒带伞
蓝色预警 → 显示天气提示
小白友好版写法😊
public void handleRainAlert(String level) {
if ("红色".equals(level)) {
System.out.println("⚠️ 停课!所有地铁停运!");
} else if ("橙色".equals(level)) {
System.out.println("🚫 取消运动会和露天活动");
} else if ("黄色".equals(level)) {
System.out.println("☔ 建议携带雨具");
} else if ("蓝色".equals(level)) {
System.out.println("🌤️ 今日可能有阵雨");
} else {
System.out.println("❓ 未知预警等级");
}
}
二、技术映射
🔧 把天气规则变成代码
正确 vs 错误写法对比表(10大常见错误)
错误类型 | 错误示例 | 正确写法 | 问题分析 |
---|---|---|---|
1. 条件顺序颠倒 | 先判断黄色再判断红色 | 红色预警优先判断 | 逻辑错误:高级别预警被覆盖 |
2. 用== 比较字符串 | if (level == "红色") | "红色".equals(level) | 空指针风险 |
3. 忽略大小写 | if (level.equals("RED")) | level.equalsIgnoreCase("red") | 本地化适配问题 |
4. 重复条件判断 | 同时存在if (A) 和else if (A) | 合并为单个if (A) | 代码冗余 |
5. 包含魔法数字 | if (level == 1) | 使用枚举AlertLevel.RED | 可读性差 |
6. 未处理空值 | 直接使用level.equals() | "红色".equals(level) | 可能抛出NPE |
7. 嵌套层级过深 | 3层以上嵌套if | 使用卫语句提前返回 | 维护成本高 |
8. 条件范围重叠 | if (level >= 1) | 明确区间划分(如switch-case ) | 逻辑冲突 |
9. 忽略全角字符 | 只判断半角"红色" | 增加全角"red" 判断 | 输入法兼容性问题 |
10. 未定义默认分支 | 缺少else 处理未知情况 | 总是包含兜底逻辑 | 未定义行为风险 |
三、知识点呈现
搞定if/else三大核心
3.1 基础语法三要素
(1)条件表达式
// 正确:用括号包裹条件
if (level.equals("红色")) { ... }
// 错误:缺少括号
if level.equals("红色") { ... }
(2)执行语句
// 单条语句
if (下雨) 打伞();
// 多条语句(必须用{}包裹)
if (高温) {
穿短袖();
开空调();
}
(3)else分支
// 互斥条件
if (红色) { ... }
else if (橙色) { ... }
else { ... }
3.2 防御性编程技巧
(1)空指针防御
// 错误写法(可能崩溃)
if (user.getInput().equals("红色")) { ... }
// 正确写法(永远安全)
if ("红色".equals(user.getInput())) { ... }
(2)类型检查
// 处理非法输入
if (!(input instanceof String)) {
throw new IllegalArgumentException("必须是字符串");
}
(3)边界条件
// 处理极端值
if (temperature >= 40) {
System.out.println("⚠️ 高温警报!");
} else if (temperature > -273) { // 绝对零度
System.out.println("正常温度");
}
3.3 条件结构优化
(1)卫语句模式
// 传统嵌套写法
if (level != null) {
if (level.equals("红色")) { ... }
}
// 重构为卫语句
if (level == null) return;
if (level.equals("红色")) { ... }
(2)策略模式
// 用Map替代多重if
Map<String, Runnable> actions = new HashMap<>();
actions.put("红色", this::handleRed);
actions.put("橙色", this::handleOrange);
// 执行时直接查找
actions.getOrDefault(level, this::handleUnknown).run();
(3)决策表驱动
// 用YAML配置规则
rules:
- condition: "level == '红色'"
action: "停课"
- condition: "level == '橙色'"
action: "取消活动"
四、代码实现
⚙️ 100%覆盖所有知识点
完整版预警处理器(含防御性代码)
public class RainAlert {
// 枚举管理预警等级
enum AlertLevel {
RED, ORANGE, YELLOW, BLUE
}
public static void main(String[] args) {
String input = "red"; // 模拟用户输入
AlertLevel level = parseLevel(input);
if (level == null) {
System.out.println("❓ 无效的预警等级");
return;
}
handleAlert(level);
}
// 类型安全转换(防御性编程)
private static AlertLevel parseLevel(String input) {
try {
return AlertLevel.valueOf(input.toUpperCase());
} catch (IllegalArgumentException e) {
return null; // 无效输入返回null
}
}
// 策略模式处理
private static void handleAlert(AlertLevel level) {
switch (level) {
case RED:
System.out.println("🚨 全校停课!");
break;
case ORANGE:
System.out.println("📢 取消露天活动");
break;
case YELLOW:
System.out.println("☔ 建议携带雨具");
break;
case BLUE:
System.out.println("🌤️ 今日有阵雨");
break;
}
}
}
五、延展思考
🤔 用流程图画条件
当条件变多时,可以先画流程图再写代码:
总结
📝 好的代码就像天气预报
通过暴雨预警场景,我们:
1️⃣ 破解了10大常见错误:从空指针到条件顺序
2️⃣ 掌握了3大核心技能:基础语法、防御编程、结构优化
3️⃣ 实现了一个鲁棒系统:可扩展、易维护、零崩溃
💡 终极建议:
-
写代码前先画判断流程图
-
每个
if
只做一件事(单一职责原则) -
永远假设用户会输入错误数据
下次遇到复杂条件判断时,记得:好的代码就像天气预报,既清晰又可靠! 🌦️