这些"如果...就..."的逻辑,在Java中就是条件判断语句
1.if语句:最简单的判断
1.1 基本if语句
Java
public class BasicIf {
public static void main(String[] args) {
System.out.println("=== 基本if语句 ===");
// 示例1:判断是否成年
int age = 20;
if (age >= 18) {
System.out.println("你已经成年了!");
}
// 示例2:判断成绩是否及格
int score = 85;
if (score >= 60) {
System.out.println("恭喜!成绩及格!");
System.out.println("你的分数是:" + score);
}
System.out.println("判断结束,继续执行其他代码...");
}
}
1.2 if-else语句:二选一
Java
public class IfElseDemo {
public static void main(String[] args) {
System.out.println("=== if-else语句 ===");
// 示例1:判断数字是奇数还是偶数
int number = 7;
if (number % 2 == 0) {
System.out.println(number + " 是偶数");
} else {
System.out.println(number + " 是奇数");
}
// 示例2:判断是否可以通过考试
int score = 55;
if (score >= 60) {
System.out.println("考试通过!");
} else {
System.out.println("考试不及格,需要补考");
}
// 示例3:简单的登录验证
String username = "admin";
String password = "123456";
if (username.equals("admin") && password.equals("123456")) {
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误!");
}
}
}
2.多重判断:if-else if-else
Java
public class MultipleIfElse {
public static void main(String[] args) {
System.out.println("=== 多重条件判断 ===");
// 示例1:成绩等级评定
int score = 85;
if (score >= 90) {
System.out.println("优秀!成绩等级:A");
} else if (score >= 80) {
System.out.println("良好!成绩等级:B");
} else if (score >= 70) {
System.out.println("中等!成绩等级:C");
} else if (score >= 60) {
System.out.println("及格!成绩等级:D");
} else {
System.out.println("不及格!成绩等级:F");
}
// 示例2:根据时间打招呼
int hour = 14; // 24小时制
if (hour >= 5 && hour < 12) {
System.out.println("上午好!");
} else if (hour >= 12 && hour < 18) {
System.out.println("下午好!");
} else if (hour >= 18 && hour < 22) {
System.out.println("晚上好!");
} else {
System.out.println("夜深了,早点休息!");
}
// 示例3:计算折扣
double purchaseAmount = 1200.0;
double discount = 0.0;
if (purchaseAmount >= 1000) {
discount = 0.2; // 8折
} else if (purchaseAmount >= 500) {
discount = 0.1; // 9折
} else if (purchaseAmount >= 200) {
discount = 0.05; // 95折
}
// 小于200没有折扣
double finalAmount = purchaseAmount * (1 - discount);
System.out.println("原价:" + purchaseAmount + "元");
System.out.println("折扣:" + (discount * 100) + "%");
System.out.println("最终价格:" + finalAmount + "元");
}
}
3.嵌套if语句:判断中的判断
Java
public class NestedIf {
public static void main(String[] args) {
System.out.println("=== 嵌套if语句 ===");
// 示例1:复杂的登录验证
String username = "admin";
String password = "123456";
boolean isVerified = true; // 是否已验证邮箱
if (username.equals("admin")) {
if (password.equals("123456")) {
if (isVerified) {
System.out.println("登录成功!欢迎回来!");
} else {
System.out.println("请先验证邮箱!");
}
} else {
System.out.println("密码错误!");
}
} else {
System.out.println("用户名不存在!");
}
// 示例2:学生奖学金评定
boolean isFullTime = true; // 是否全日制
double gpa = 3.8; // 平均绩点
int attendance = 95; // 出勤率
if (isFullTime) {
if (gpa >= 3.5) {
if (attendance >= 90) {
System.out.println("符合一等奖学金条件!");
} else if (attendance >= 80) {
System.out.println("符合二等奖学金条件!");
} else {
System.out.println("出勤率不足,不符合奖学金条件");
}
} else {
System.out.println("绩点不足,不符合奖学金条件");
}
} else {
System.out.println("非全日制学生不符合奖学金条件");
}
// 示例3:游戏角色状态判断
int health = 80; // 生命值
int mana = 30; // 魔法值
boolean hasWeapon = true;
if (health > 0) { // 角色还活着
if (hasWeapon) {
if (mana >= 20) {
System.out.println("可以使用魔法攻击!");
} else {
System.out.println("魔法值不足,只能普通攻击");
}
} else {
System.out.println("没有武器,只能徒手攻击");
}
} else {
System.out.println("角色已死亡!");
}
}
}
4.switch语句:多分支选择
Java
public class SwitchDemo {
public static void main(String[] args) {
System.out.println("=== switch语句 ===");
// 示例1:根据星期几决定做什么
int dayOfWeek = 3; // 1=周一,2=周二,...,7=周日
switch (dayOfWeek) {
case 1:
System.out.println("星期一:新的一周开始了!");
break;
case 2:
System.out.println("星期二:继续努力工作!");
break;
case 3:
System.out.println("星期三:一周过半啦!");
break;
case 4:
System.out.println("星期四:周末快来了!");
break;
case 5:
System.out.println("星期五:终于到周五了!");
break;
case 6:
case 7:
System.out.println("周末:好好休息!");
break;
default:
System.out.println("无效的星期数!");
}
// 示例2:根据成绩等级给出评语
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("优秀!继续保持!");
break;
case 'B':
System.out.println("良好!还有进步空间!");
break;
case 'C':
System.out.println("中等!需要更加努力!");
break;
case 'D':
System.out.println("及格!要加油了!");
break;
case 'F':
System.out.println("不及格!需要补考!");
break;
default:
System.out.println("无效的成绩等级!");
}
// 示例3:根据月份判断季节
int month = 8;
String season;
switch (month) {
case 12:
case 1:
case 2:
season = "冬季";
break;
case 3:
case 4:
case 5:
season = "春季";
break;
case 6:
case 7:
case 8:
season = "夏季";
break;
case 9:
case 10:
case 11:
season = "秋季";
break;
default:
season = "无效月份";
}
System.out.println(month + "月是" + season);
// 示例4:Java 12+ 新的switch表达式
System.out.println("\n=== Java 12+ switch表达式 ===");
String fruit = "苹果";
String taste = switch (fruit) {
case "苹果" -> "甜的";
case "柠檬" -> "酸的";
case "香蕉" -> "软的";
case "西瓜" -> "多汁的";
default -> "不知道的味道";
};
System.out.println(fruit + "是" + taste);
}
}
5.三元运算符:简洁的条件判断
Java
public class TernaryOperator {
public static void main(String[] args) {
System.out.println("=== 三元运算符 ===");
// 语法:条件 ? 值1 : 值2
// 如果条件为true,返回值1,否则返回值2
// 示例1:找出两个数中的较大值
int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println(a + "和" + b + "中较大的数是:" + max);
// 示例2:判断奇偶数
int number = 7;
String parity = (number % 2 == 0) ? "偶数" : "奇数";
System.out.println(number + "是" + parity);
// 示例3:根据成绩判断是否及格
int score = 75;
String result = (score >= 60) ? "及格" : "不及格";
System.out.println("成绩" + score + "分:" + result);
// 示例4:嵌套三元运算符(不推荐太复杂)
int x = 10;
int y = 20;
int z = 15;
// 找出三个数中的最大值
int largest = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
System.out.println(x + "," + y + "," + z + "中最大的数是:" + largest);
// 示例5:实际应用场景
boolean isMember = true;
double totalAmount = 1000.0;
// 会员享受9折,非会员原价
double finalAmount = isMember ? totalAmount * 0.9 : totalAmount;
System.out.println("会员状态:" + (isMember ? "是会员" : "非会员"));
System.out.println("应付金额:" + finalAmount + "元");
}
}
5.综合实战:学生成绩管理系统
Java
import java.util.Scanner;
public class StudentGradeSystem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 学生成绩管理系统 ===");
// 输入学生信息
System.out.print("请输入学生姓名:");
String name = scanner.nextLine();
System.out.print("请输入学生年龄:");
int age = scanner.nextInt();
System.out.print("请输入语文成绩:");
int chinese = scanner.nextInt();
System.out.print("请输入数学成绩:");
int math = scanner.nextInt();
System.out.print("请输入英语成绩:");
int english = scanner.nextInt();
// 计算总分和平均分
int total = chinese + math + english;
double average = total / 3.0;
// 判断各科是否及格
boolean chinesePass = chinese >= 60;
boolean mathPass = math >= 60;
boolean englishPass = english >= 60;
// 判断总体是否及格(所有科目都及格)
boolean allPass = chinesePass && mathPass && englishPass;
// 判断是否有科目不及格
boolean anyFail = !chinesePass || !mathPass || !englishPass;
// 判断优秀科目(90分以上)
int excellentCount = 0;
if (chinese >= 90) excellentCount++;
if (math >= 90) excellentCount++;
if (english >= 90) excellentCount++;
// 判断总体等级
String overallGrade;
if (average >= 90) {
overallGrade = "优秀";
} else if (average >= 80) {
overallGrade = "良好";
} else if (average >= 70) {
overallGrade = "中等";
} else if (average >= 60) {
overallGrade = "及格";
} else {
overallGrade = "不及格";
}
// 输出结果
System.out.println("\n=== 成绩报告 ===");
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("总分:" + total);
System.out.println("平均分:" + String.format("%.2f", average));
System.out.println("总体等级:" + overallGrade);
System.out.println("\n=== 各科情况 ===");
System.out.println("语文:" + chinese + "分 - " + (chinesePass ? "及格" : "不及格"));
System.out.println("数学:" + math + "分 - " + (mathPass ? "及格" : "不及格"));
System.out.println("英语:" + english + "分 - " + (englishPass ? "及格" : "不及格"));
System.out.println("\n=== 综合分析 ===");
if (allPass) {
System.out.println("恭喜!所有科目都及格了!");
} else {
System.out.println("注意:有科目不及格,需要加强学习!");
}
if (excellentCount > 0) {
System.out.println("有" + excellentCount + "门科目达到优秀!");
}
if (average >= 90) {
System.out.println("平均分达到优秀,表现非常出色!");
} else if (average >= 80) {
System.out.println("平均分良好,继续保持!");
} else if (average >= 60) {
System.out.println("平均分及格,还有提升空间!");
} else {
System.out.println("平均分不及格,需要加倍努力!");
}
// 根据情况给出建议
System.out.println("\n=== 学习建议 ===");
if (!chinesePass) {
System.out.println("语文需要加强,建议多阅读多练习!");
}
if (!mathPass) {
System.out.println("数学需要加强,建议多做练习题!");
}
if (!englishPass) {
System.out.println("英语需要加强,建议多背单词多听多说!");
}
if (chinese >= 90 && math >= 90 && english >= 90) {
System.out.println("所有科目都非常优秀,继续保持!");
} else if (average >= 80) {
System.out.println("总体表现良好,继续努力争取更好成绩!");
} else if (average >= 60) {
System.out.println("基础尚可,需要查漏补缺!");
} else {
System.out.println("需要全面加强学习,制定详细学习计划!");
}
scanner.close();
}
}
7.常见错误和注意事项
错误示例:
Java
public class CommonMistakes {
public static void main(String[] args) {
System.out.println("=== 常见错误示例 ===");
// 错误1:条件后面直接跟分号
int score = 85;
// if (score >= 60); // ❌ 错误:分号结束了if语句
// {
// System.out.println("及格"); // 这行总是会执行,不在if控制范围内
// }
// 正确做法:
if (score >= 60) { // ✅ 正确:没有分号
System.out.println("及格");
}
// 错误2:比较字符串用==
String str1 = "hello";
String str2 = "hello";
// if (str1 == str2) { // ❌ 可能正确也可能错误,不要用==比较字符串内容
// System.out.println("相等");
// }
// 正确做法:
if (str1.equals(str2)) { // ✅ 正确:用equals比较字符串内容
System.out.println("相等");
}
// 错误3:switch忘记写break
int day = 1;
switch (day) {
case 1:
System.out.println("周一");
// ❌ 忘记写break,会"穿透"到case 2
case 2:
System.out.println("周二");
break;
}
// 输出结果会是:
// 周一
// 周二
// 正确做法:
switch (day) {
case 1:
System.out.println("周一");
break; // ✅ 记得写break
case 2:
System.out.println("周二");
break;
}
// 错误4:浮点数直接用==比较
double d1 = 0.1 + 0.2;
double d2 = 0.3;
// if (d1 == d2) { // ❌ 错误:浮点数精度问题,可能不相等
// System.out.println("相等");
// }
// 正确做法:
if (Math.abs(d1 - d2) < 0.000001) { // ✅ 正确:判断差值是否足够小
System.out.println("相等");
}
}
}
最佳实践:
Java
public class BestPractices {
public static void main(String[] args) {
System.out.println("=== 最佳实践 ===");
// 1. 使用括号明确优先级
int a = 10, b = 20, c = 30;
// 不明确的做法:
// if (a > b && b > c || c > a) // 优先级不清晰
// 明确的做法:
if ((a > b && b > c) || (c > a)) { // 使用括号明确优先级
System.out.println("条件成立");
}
// 2. 避免过深的嵌套
// 不好的做法:
// if (condition1) {
// if (condition2) {
// if (condition3) {
// // 太多层嵌套,难以阅读
// }
// }
// }
// 好的做法:使用逻辑运算符合并条件
boolean condition1 = true, condition2 = true, condition3 = true;
if (condition1 && condition2 && condition3) {
System.out.println("所有条件都满足");
}
// 3. 复杂判断使用临时变量
int age = 20;
boolean hasLicense = true;
boolean isSober = true;
// 不推荐:
// if (age >= 18 && hasLicense && isSober) {
// 推荐:使用临时变量提高可读性
boolean canDrive = age >= 18 && hasLicense && isSober;
if (canDrive) {
System.out.println("可以开车");
}
// 4. switch使用default处理意外情况
int option = 5;
switch (option) {
case 1:
System.out.println("选项1");
break;
case 2:
System.out.println("选项2");
break;
default: // 总是包含default处理意外输入
System.out.println("无效选项");
}
}
}
三种判断方式对比:
| 方式 | 适用场景 | 特点 |
|---|---|---|
if语句 |
简单判断 | 最基本,最灵活 |
if-else, if-else |
多重条件 | 处理多个互斥条件 |
switch语句 |
多分支选择 | 处理固定值的选择,代码更清晰 |
选择指南:
- 只有一两个条件 → 用
if或if-else - 多个互斥条件 → 用
if-else,if-else - 基于固定值的多分支 → 用
switch - 简单的二选一 → 考虑用三元运算符