引言:什么是条件语句?
条件语句是编程中最基本也是最重要的控制结构之一。在现实生活中,我们经常需要根据不同的情况做出不同的决定。比如:
- 如果下雨了,就带伞
- 如果考试成绩大于等于60分,就及格,否则不及格
- 如果天气好,就去公园,否则如果下雨,就在家看电影
条件语句就是用来让程序根据条件的真假来选择执行不同代码路径的机制。
核心概念:条件语句通过判断条件(一个返回boolean值的表达式)的真假,来决定执行哪一段代码。
if语句:最基本的条件判断
语法结构
if (条件) {
// 当条件为true时执行的代码
// 这里的代码必须缩进
}
执行流程图
开始
→
条件判断
是 →
执行代码块
→
继续执行后续代码
否 →
跳过if代码块
→
继续执行后续代码
示例:简单的条件判断
int age = 18;
// 如果年龄大于等于18,就打印"已成年"
if (age >= 18) {
System.out.println("你已经成年了!");
}
// 无论条件是否满足,程序都会继续执行这里
System.out.println("程序继续执行...");
关键点:if后面的条件必须用括号括起来,并且条件表达式的结果必须是boolean类型(true或false)。
if-else语句:二选一的条件判断
语法结构
if (条件) {
// 条件为true时执行这里
} else {
// 条件为false时执行这里
}
执行流程图
条件判断
是 →
执行if代码块
→
结束
否 →
执行else代码块
→
结束
示例:判断奇偶数
int number = 7;
if (number % 2 == 0) {
System.out.println(number + " 是偶数");
} else {
System.out.println(number + " 是奇数");
}
示例:判断闰年
int year = 2026;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
System.out.println(year + "年是闰年");
} else {
System.out.println(year + "年是平年");
}
if-else if-else语句:多分支条件判断
语法结构
if (条件1) {
// 条件1为true时执行
} else if (条件2) {
// 条件1为false,且条件2为true时执行
} else if (条件3) {
// 条件1、条件2都为false,且条件3为true时执行
} else {
// 所有条件都为false时执行
}
执行流程图
条件1?
是 →
执行代码块1
→
结束
否 ↓
条件2?
是 →
执行代码块2
→
结束
否 ↓
条件3?
是 →
执行代码块3
→
结束
否 ↓
执行else代码块
→
结束
重要特点
顺序执行:条件从上往下依次判断
一旦满足就执行:找到第一个满足的条件后,执行对应代码块,然后跳出整个if-else结构
else可以省略:没有else时,如果所有条件都不满足,则什么都不执行
else if可以有多个:根据需要可以有任意多个else if
示例:成绩等级判定
int score = 78;
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 (不及格)");
}
常见错误:下面的代码逻辑是错误的,因为score是78,不可能同时满足>=90和>=80:
// 错误写法:多个条件可能同时满足
if (score >= 60) {
System.out.println("及格");
} else if (score >= 70) { // 这个条件实际上不可能执行到
System.out.println("中等");
} else if (score >= 80) { // 这个条件实际上不可能执行到
System.out.println("良好");
}
示例:BMI指数判断
double height = 1.75; // 米
double weight = 70; // 公斤
double bmi = weight / (height * height);
System.out.println("BMI指数: " + String.format("%.2f", bmi));
if (bmi < 18.5) {
System.out.println("体重过轻 - 建议增加营养摄入");
} else if (bmi < 24) {
System.out.println("体重正常 - 继续保持");
} else if (bmi < 28) {
System.out.println("体重过重 - 建议适当运动");
} else {
System.out.println("肥胖 - 建议咨询医生制定减肥计划");
}
嵌套if语句
在if或else的代码块内部,再包含完整的if语句,称为嵌套if。
语法结构
if (外层条件) {
// 外层条件为true时执行的代码
if (内层条件) {
// 外层和内层条件都为true时执行
} else {
// 外层条件为true,但内层条件为false时执行
}
} else {
// 外层条件为false时执行
}
示例:用户登录系统
String username = "admin";
String password = "123456";
int userAge = 25;
if (username.equals("admin")) {
System.out.println("用户名正确");
if (password.equals("123456")) {
System.out.println("密码正确,登录成功");
if (userAge >= 18) {
System.out.println("欢迎进入系统,您已成年");
} else {
System.out.println("您还未成年,部分功能受限");
}
} else {
System.out.println("密码错误");
}
} else {
System.out.println("用户名不存在");
}
嵌套层次建议:避免过深的嵌套(建议不超过3层)。过深的嵌套会使代码难以阅读和维护。可以通过以下方式简化:
- 使用提前返回(return)减少嵌套
- 将内层逻辑抽取为方法
- 使用卫语句(Guard Clause)先处理异常情况
三元运算符:if-else的简化形式
语法
条件 ? 值1 : 值2
如果条件为true,整个表达式的值是值1;如果为false,整个表达式的值是值2。
与if-else的对比
使用if-else
int a = 10, b = 20;
int max;
if (a > b) {
max = a;
} else {
max = b;
}
使用三元运算符
int a = 10, b = 20;
int max = (a > b) ? a : b;
三元运算符示例
int a = 10, b = 20;
// 求最大值
int max = (a > b) ? a : b;
System.out.println("最大值: " + max); // 20
// 求最小值
int min = (a < b) ? a : b;
System.out.println("最小值: " + min); // 10
// 判断奇偶
int num = 7;
String result = (num % 2 == 0) ? "偶数" : "奇数";
System.out.println(num + " 是" + result); // 7 是奇数
// 嵌套三元运算符(不推荐,代码可读性差)
int gradeScore = 78;
char grade = gradeScore >= 90 ? 'A' :
gradeScore >= 80 ? 'B' :
gradeScore >= 70 ? 'C' :
gradeScore >= 60 ? 'D' : 'F';
System.out.println("成绩" + gradeScore + ",等级: " + grade); // C
何时使用三元运算符:
- 适合简单的二选一赋值情况
- 不适合复杂的条件判断
- 不要嵌套使用三元运算符(会导致代码难以理解)
条件判断的注意事项
1. 条件必须是boolean类型
int num = 10;
// 正确:条件是 boolean 表达式
if (num > 5) { }
// 错误:不能这样写
// if (num) { } // 编译错误!
// 正确:单独使用 boolean 变量作为条件
boolean isPositive = num > 0;
if (isPositive) { }
2. 浮点数比较的注意事项
// 由于浮点数精度问题,直接用 == 比较浮点数可能出问题
double a = 0.1 + 0.2;
double b = 0.3;
// 不要这样比较浮点数
if (a == b) { } // 可能永远为false!
// 应该使用差值比较
if (Math.abs(a - b) < 0.000001) {
System.out.println("近似相等");
}
3. 字符串比较
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
// 使用 equals() 比较字符串内容
if (str1.equals(str2)) {
System.out.println("内容相同");
}
// 不要使用 == 比较字符串(比较的是引用地址)
if (str1 == str2) { // 可能碰巧为true(字符串常量池)
System.out.println("相同");
}
if (str1 == str3) { // 一定为false
System.out.println("不会执行");
}
4. 代码块与大括号
int num = 10;
// 如果只有一行代码,可以省略大括号(不推荐)
if (num > 5)
System.out.println("大于5"); // 只有这一行属于if
// 建议始终使用大括号,即使只有一行代码
if (num > 5) {
System.out.println("大于5");
}
最佳实践:始终使用大括号包围if/else的代码块,即使只有一行代码。这样可以提高代码可读性,也便于后续添加更多代码。
实战练习
练习1:计算器功能
int num1 = 10;
int num2 = 3;
char operator = '+';
if (operator == '+') {
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
} else if (operator == '-') {
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
} else if (operator == '*') {
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
} else if (operator == '/') {
if (num2 != 0) {
System.out.println(num1 + " / " + num2 + " = " + (num1 / (double)num2));
} else {
System.out.println("错误:除数不能为0");
}
} else {
System.out.println("错误:不支持的操作符");
}
练习2:判断三角形类型
int side1 = 3, side2 = 3, side3 = 3;
if (side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1) {
if (side1 == side2 && side2 == side3) {
System.out.println("等边三角形");
} else if (side1 == side2 || side2 == side3 || side1 == side3) {
System.out.println("等腰三角形");
} else {
System.out.println("不等边三角形");
}
} else {
System.out.println("不能构成三角形");
}
小结
- if语句:最基本的条件判断,条件为true时执行代码块
- if-else语句:二选一的条件判断,条件为true执行if块,否则执行else块
- if-else if-else语句:多分支条件判断,按顺序判断多个条件
- 嵌套if:在if或else块内再包含if语句,但应避免过深嵌套
- 三元运算符:
条件 ? 值1 : 值2,适合简单的二选一赋值 - 条件表达式的结果必须是boolean类型
- 建议始终使用大括号包围代码块
- 字符串比较使用equals()方法,不要使用==
☕ Java 在线代码编辑器
📝 运行结果