0赞
赞赏
更多好文
零基础友好|生活化决策树|避坑指南|附可运行小游戏
承接《变量与循环》—— 今天教你赋予代码“思考力”,让它根据情况做决定!
🌱 为什么需要条件判断?—— 程序的“大脑”觉醒时刻
想象这些场景:
☕️ 咖啡机:检测到“杯子放好”才出咖啡
🚦 红绿灯:根据时间切换“红/黄/绿”
📱 手机:电量<20%时弹出“低电量提醒”
条件判断 = 程序的决策能力
→ 让代码从“死板执行”升级为 “智能响应”
→ if/else 就是Java的“如果...就..."语言
💡 核心公式:
如果(条件成立)→ 做A事;否则 → 做B事
掌握它,你的程序才真正“活”起来!
📜 一、if/else 语法全家福(附生活对照表)
| 语法结构 | 适用场景 | 生活例子 | 代码骨架 |
|---|---|---|---|
| if | 单条件判断 | “如果下雨,带伞” | if(下雨) 带伞; |
| if-else | 二选一 | “如果及格,庆祝;否则,复习” | if(及格) 庆祝; else 复习; |
| if-else if-else | 多条件分支 | 成绩评级(A/B/C/D) | if(>=90)A; else if(>=80)B; ... |
| 嵌套if | 复杂逻辑 | “如果周末且晴天,去公园” | if(周末){ if(晴天) 去公园; } |
🔍 二、实战代码库(复制即运行!)
🌰 场景1:成绩评级系统(if-else if 经典应用)
public class GradeEvaluator {
public static void main(String[] args) {
int score = 85; // 尝试修改这个分数!
if (score >= 90) {
System.out.println("🏆 优秀!(A)");
} else if (score >= 80) {
System.out.println("👍 良好!(B)");
} else if (score >= 60) {
System.out.println("✅ 及格!(C)");
} else {
System.out.println("💪 加油!需要努力(D)");
}
// 附加提示:结合三元运算符
String passStatus = (score >= 60) ? "通过" : "未通过";
System.out.println("📌 当前状态:" + passStatus);
}
}
✅ 修改score测试:
score=95 → 🏆 优秀!(A)
score=59 → 💪 加油!需要努力(D)
🌰 场景2:智能天气助手(嵌套if实战)
public class WeatherAdvisor {
public static void main(String[] args) {
boolean isRainy = true;
int temperature = 15; // 摄氏度
if (isRainy) {
System.out.println("☔ 建议:带伞出门!");
if (temperature < 10) {
System.out.println("🧥 额外提醒:加件外套,今天又湿又冷!");
}
} else {
if (temperature > 30) {
System.out.println("☀️ 建议:防晒+补水,高温预警!");
} else if (temperature > 20) {
System.out.println("🌤️ 建议:短袖出行,舒适宜人~");
} else {
System.out.println("🧥 建议:薄外套,微凉注意保暖");
}
}
}
}
💡 关键理解:
- 嵌套if让逻辑层层细化
- 缩进是生命线!(IDE会自动格式化,养成好习惯)
🌰 场景3:三元运算符——if/else的“极简版”
// 传统写法
int age = 18;
String status;
if (age >= 18) {
status = "成年人";
} else {
status = "未成年人";
}
// 三元运算符(一行搞定!)
String status2 = (age >= 18) ? "成年人" : "未成年人";
System.out.println("身份判定:" + status2); // 输出:成年人
// 实战:判断奇偶数
int num = 7;
System.out.println(num + "是" + (num % 2 == 0 ? "偶数" : "奇数")); // 输出:7是奇数
✅ 使用原则:
- 仅用于简单赋值(逻辑复杂时用if/else更清晰)
- 格式:
条件 ? 真值 : 假值
🔄 三、switch 语句:多分支的优雅解法(Java 14+ 增强版)
传统switch(Java 12前)
String day = "Monday";
switch (day) {
case "Monday":
System.out.println("💪 周一:加油开工!");
break; // 必须!否则会“穿透”到下一条
case "Friday":
System.out.println("🎉 周五:周末倒计时!");
break;
default:
System.out.println("📚 " + day + ":认真工作学习");
}
✨ Java 14+ 增强switch(推荐!更安全简洁)
int month = 12;
String season = switch (month) {
case 12, 1, 2 -> "❄️ 冬季";
case 3, 4, 5 -> "🌱 春季";
case 6, 7, 8 -> "☀️ 夏季";
case 9, 10, 11 -> "🍂 秋季";
default -> "❓ 无效月份";
};
System.out.println("当前季节:" + season); // 输出:❄️ 冬季
✅ 优势:
- 无需
break,避免穿透错误 - 支持箭头语法
->,逻辑更清晰 - 可直接返回值(如上例赋值给season)
📌 新手建议:
- 分支≤3个 → 用if-else
- 分支≥4个且条件为等值判断(如数字/字符串)→ 用switch
- Java 14+ 优先用增强switch
🆘 四、血泪避坑指南(90%新手栽过跟头!)
| 陷阱 | 错误代码 | 正确写法 | 原因解析 |
|---|---|---|---|
| 赋值 vs 比较 | if (score = 90) | if (score == 90) | =是赋值,==才是比较!编译报错 |
| 浮点数比较 | if (0.1 + 0.2 == 0.3) | Math.abs(a-b) < 1e-6 | 浮点精度误差,永远别用==比小数 |
| 字符串比较 | if (name == "张三") | if ("张三".equals(name)) | ==比地址,equals比内容 |
| 遗漏大括号 | if (x>0) System.out.println("正"); x++; | if (x>0) { ... } | 无大括号时,if只控制下一行! |
| 条件永真/永假 | if (x > 0 && x < 0) | 检查逻辑矛盾 | 编译器可能警告,但逻辑错误难发现 |
💡 黄金法则:
1️⃣ 字符串比较永远用.equals()
2️⃣ 浮点数比较用范围判断
3️⃣ if后哪怕只有一行,也加{}(团队规范+防坑)
🎮 五、综合实战:石头剪刀布游戏(融合Scanner+随机数+条件判断)
import java.util.Scanner;
import java.util.Random;
public class RockPaperScissors {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random rand = new Random();
System.out.println("🎮 石头剪刀布大战!输入:1=石头 2=剪刀 3=布");
System.out.print("你的选择:");
int user = sc.nextInt();
// 电脑随机出拳(1-3)
int computer = rand.nextInt(3) + 1;
String[] choices = {"", "石头", "剪刀", "布"};
System.out.println("你出:" + choices[user] + " | 电脑出:" + choices[computer]);
// 核心判断逻辑
if (user == computer) {
System.out.println("🤝 平局!再来一局?");
} else if (
(user == 1 && computer == 2) || // 石头赢剪刀
(user == 2 && computer == 3) || // 剪刀赢布
(user == 3 && computer == 1) // 布赢石头
) {
System.out.println("🎉 恭喜你赢了!");
} else {
System.out.println("😭 电脑获胜...");
}
sc.close();
}
}
✅ 运行效果示例:
🎮 石头剪刀布大战!输入:1=石头 2=剪刀 3=布
你的选择:1
你出:石头 | 电脑出:剪刀
🎉 恭喜你赢了!
✨ 升级挑战:
- 用循环实现“三局两胜制”(复用上篇循环知识!)
- 添加输入校验(非1/2/3时提示重新输入)
- 统计胜/负/平局次数
📚 六、决策流程图:何时用哪种判断?
graph TD
A[需要做选择?] -->|是| B{条件数量}
B -->|1个条件| C[if]
B -->|2个互斥结果| D[if-else]
B -->|≥3个等值分支| E[switch]
B -->|复杂逻辑嵌套| F[嵌套if + 逻辑优化]
C --> G[执行对应代码]
D --> G
E --> G
F --> G
A -->|否| H[顺序执行]
💫 七、结语:你的程序已拥有“思考力”!
今天你解锁了:
🔹 用if/else实现二选一决策
🔹 用switch优雅处理多分支
🔹 避开字符串/浮点数比较陷阱
🔹 写出能和你“互动”的小游戏从此,你的代码不再机械执行——它开始理解世界,做出选择!
🌱 行动三连:
1️⃣ 修改石头剪刀布代码,添加“输入无效请重试”逻辑
2️⃣ 写一个“根据时间输出问候语”的程序(6-12点:早上好!)
3️⃣ 在评论区晒出你的代码 + 一句心得下期预告:《Java方法(函数):把重复代码装进“工具箱”》
—— 教你封装逻辑、提升代码复用性,告别复制粘贴!
本文代码经JDK 21实测 | 所有示例可直接复制运行 | 遇到问题截图留言必回
✨ 代码有逻辑,成长有路径 —— 你的Java进阶伙伴 🌱
原创声明:转载需授权并保留出处 | 2024技术温暖陪伴
