


### 2.4 选择结构语句
在实际的编程过程中,经常需要根据条件执行不同的代码块,这就是选择结构的作用。Java提供了多种选择语句,如`if`、`if...else`、`if...else if...else`和`switch`语句。
**2.4.1 if条件语句**
- **基本概念:** `if`语句允许根据一个布尔条件执行代码。如果条件为真,则执行`if`块内的语句。
- if (判断条件) {
- 执行语句;
- }
- **示例:** 小明的妈妈告诉他,如果考试得满分,则他们会去游乐场。
- if (小明的分数 == 100) {
- 去游乐场;
- }
**文件2-7示例:**
此示例展示了如何使用`if`语句来判断一个整数的值。
- public class Example07 {
- public static void main(String[] args) {
- int x = 5;
- if (x < 10) {
- x++;
- }
- System.out.println("x=" + x);
- }
- }
**2.4.2 if...else语句**
- **基本概念:** `if...else`语句不仅可以根据一个布尔条件执行代码,还可以在条件为假时执行另一个代码块。
- **语法:**
- if (判断条件) {
- 执行语句1;
- } else {
- 执行语句2;
- }
- **示例:** 判断一个整数是奇数还是偶数。
- if (num % 2 == 0) {
- System.out.println("num是一个偶数");
- } else {
- System.out.println("num是一个奇数");
- }
**2.4.3 if...else if...else语句**
- **基本概念:** 当存在多个条件需要判断时,可以使用`if...else if...else`结构。该结构可以有一个或多个`else if`部分。
- **语法:**
- if (判断条件1) {
- 执行语句1;
- } else if (判断条件2) {
- 执行语句2;
- } ...
- else {
- 执行语句n;
- }
- **示例:** 根据学生的考试成绩进行等级划分。
---
**Java选择结构笔记**
1. **if...else if...else结构**:
- 基于不同的布尔条件执行不同的语句块。
- 执行流程如下:
- 如果`判断条件1`为true,则执行`执行语句1`;
- 否则,如果`判断条件2`为true,则执行`执行语句2`;
- 以此类推,如果所有条件都为false,则执行`else`块中的`执行语句n+1`。
*示例*:
- int grade = 75;
- if(grade > 80){
- System.out.println("该成绩的等级为优");
- } else if(grade > 70){
- System.out.println("该成绩的等级为良");
- } else if(grade > 60){
- System.out.println("该成绩的等级为中");
- } else {
- System.out.println("该成绩的等级为差");
- }
*结果*: 该成绩的等级为良
2. **三元运算符**:
- 用于在一个表达式中执行简单的条件检查。
- 格式: `条件 ? 值1 : 值2`
- 如果条件为true,则结果为值1,否则为值2。
*示例*:
- int x, y;
- int max = x > y ? x : y;
3. **switch语句**:
- 根据一个表达式的值在多个选项中进行选择。
- 可用于代替多个if...else if语句。
- 主要用于检查离散的值,例如用数字代表星期天。
2.4.2 三元运算符**2.4.2 三元运算符**
Java提供了一种简洁的方法来进行条件判断,并根据判断的结果来决定值,这就是所谓的三元运算符。
**基本语法**:
判断条件 ? 表达式1 : 表达式2
- 当`判断条件`成立(即为`true`)时,整个三元表达式的值是`表达式1`的值。
- 当`判断条件`不成立(即为`false`)时,整个三元表达式的值是`表达式2`的值。
**与if...else的对比**:
考虑一个例子,我们要找出两个数`x`和`y`之间的较大者。
使用if...else语句:
- int x = 0;
- int y = 1;
- int max;
- if(x > y) {
- max = x;
- } else {
- max = y;
- }
- System.out.println(max);
使用三元运算符:
- int x = 0;
- int y = 1;
- int max = x > y ? x : y;
- System.out.println(max);
可以看到,使用三元运算符的代码更加简洁。
**注意事项**:
1. 三元运算符由两个符号“?”和“:”组成,这两个符号必须配合使用,不能单独使用。
2. 三元运算符的优先级低于关系运算符和算术运算符,但高于赋值运算符。
3. 三元运算符可以进行嵌套使用。例如,`a > b ? a : c > d ? c : d`应该被理解为`a > b ? a : (c > d ? c : d)`。这是一个嵌套的三元运算符,其中的表达式2又是一个三元表达式。
**结论**:
三元运算符为Java程序员提供了一种简洁而强大的工具,可以用于简化基于条件的值分配。但是,过度使用或嵌套三元运算符可能会使代码难以阅读和维护,所以在使用时需要权衡。

**2.4.3 switch条件语句**
`switch`语句是Java中的选择结构,与`if-else`语句相似,但其工作方式与`if-else`有所不同。
**基本概念**:
与`if`条件语句不同的是,`switch`语句基于一个表达式或变量的值来执行代码块,而不是基于条件表达式的结果。
**基本语法**:
- switch(表达式) {
- case 值1:
- // 代码
- break;
- case 值2:
- // 代码
- break;
- // ... 更多的case...
- default:
- // 代码
- }
- 表达式的值与case语句中的值进行比较。
- 如果找到匹配的值,那么与此值相关的代码块会被执行。
- `break`语句用于中断`switch`语句。
- 如果没有匹配到任何`case`,那么`default`部分的代码块会被执行。
**示例**:
如果根据一个数字(1-7)输出对应的星期名称,使用`switch`语句会更有条理:
- int week = 5;
- switch(week) {
- 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:
- System.out.println("星期六");
- break;
- case 7:
- System.out.println("星期天");
- break;
- default:
- System.out.println("输入的数字不正确...");
- }
在上述代码中,当`week`等于5时,输出为“星期五”。
**多个case共用一个代码块**:
有时,我们可能希望多个`case`标签可以共享同一个代码块。例如,判断是否为工作日:
- int week = 2;
- switch(week) {
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- System.out.println("今天是工作日");
- break;
- case 6:
- case 7:
- System.out.println("今天是休息日");
- break;
- }
此代码将会为`week`值1到5输出“今天是工作日”,而对于值6和7,则输出“今天是休息日”。
**总结**:
`switch`语句为处理基于多个固定值的情况提供了一种简洁的方式。尽管`if-else`语句在处理更复杂的条件时可能更为灵活,但在某些情况下,`switch`语句可能更具可读性和效率。

总结**选择结构语句总结:**
**1. 重点:**
- `if`、`if-else`和`if-else if-else`是根据不同的条件执行不同的代码块。
- `switch`基于一个表达式的值执行不同的代码块。
**2. 难点:**
- 确保`if-else if-else`结构中的逻辑是互斥的,确保不会有重叠。
- `switch`语句只能处理等值条件,而不能处理范围或多重条件。
**3. 易错点:**
- 忘记在`switch`语句中的每个`case`后面使用`break`,从而导致“fall through”(即执行完一个`case`后,继续执行下一个`case`,直到遇到`break`或`switch`结束)。
- 在`if`语句中,使用`=`(赋值)而不是`==`(相等性检查)。
- 不适当地嵌套`if`语句,导致逻辑混淆。
- 在`switch`语句中,如果多个`case`共享同一个代码块,忘记`break`可能导致意外的行为。
**4. 使用技巧:**
- **何时使用`if`**:当你需要基于一个或多个条件执行代码时。适合用于范围判断、多重条件判断或者复杂的逻辑关系。
- 例:`if(age > 18 && isMember)`
- **何时使用`switch`**:当你需要基于一个变量或表达式的多个固定值执行代码时。适合用于简单的等值判断,且这些值之间没有关联或范围。
- 例:根据一周的天数(1-7)来决定输出星期几。
**建议:**
- 对于两种或两种以上的选择,可以考虑使用`if-else`或`switch`,但应根据具体情况选择更为清晰的结构。
- 当有许多可能的值但只有几种实际的操作时,使用`switch`可能更为简洁。例如,多个状态可能导致同一操作。
- 当处理范围、逻辑关系或多重条件时,使用`if-else`结构。
- 总是确保代码的可读性,有时添加注释或重新组织逻辑可以避免未来的混淆。
