Java条件判断:程序的"决策大脑"

这些"如果...就..."的逻辑,在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-elseif-else 多重条件 处理多个互斥条件
switch语句 多分支选择 处理固定值的选择,代码更清晰

选择指南:

  1. 只有一两个条件 → 用ifif-else
  2. 多个互斥条件 → 用if-elseif-else
  3. 基于固定值的多分支 → 用switch
  4. 简单的二选一 → 考虑用三元运算符
相关推荐
我是华为OD~HR~栗栗呀2 小时前
华为OD-C面经-23届学院哦
java·c++·python·华为od·华为·面试
小马爱打代码2 小时前
Spring AI:文生图:调用通义万相 AI 大模型
java·人工智能·spring
摇滚侠2 小时前
2025最新 SpringCloud 教程,网关功能、创建网关,笔记51、笔记52
java·笔记·spring cloud
又是忙碌的一天2 小时前
Socket学习
java·学习·socket
香吧香3 小时前
Spring boot 中 CommandLineRunner 在服务启动完成后自定义执行
java·spring boot·spring cloud
浓墨染彩霞3 小时前
Java-----多线路
java·经验分享·笔记
清晓粼溪3 小时前
SpringMVC02:扩展知识
java·后端·spring
曹牧3 小时前
Java String[] 数组的 contains
java·开发语言·windows
qq_12498707533 小时前
基于springboot+vue+mysql的校园博客系统(源码+论文+部署+安装)
java·vue.js·spring boot·mysql·毕业设计