分支结构
if...else
if...else 是编程中用于条件控制流的基本结构,它允许程序根据不同的条件执行不同的代码块。以下是 if...else 结构的一些关键特点和用法:
基本语法:
javaif (条件) {
// 条件为真时执行的代码块
} else {
// 条件为假时执行的代码块
}
关键特点:
- 条件判断:
if后面跟着的条件(通常是一个布尔表达式)决定了哪个代码块将被执行。 - 分支执行:如果条件为
true,则执行if代码块;如果条件为false,则执行else代码块。 - 单一
else对应一个if:每个else只与它上面的最近的if配对。 - 可嵌套使用:
if...else结构可以相互嵌套,形成更复杂的条件逻辑。
示例代码:
javaint score = 75;
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 70) {
System.out.println("C");
} else {
System.out.println("F");
}
在这个示例中,程序根据 score 变量的值,通过一系列的 if...else 语句判断并打印出对应的成绩等级。
扩展用法:
- 省略
else:else可以省略,如果条件不满足且没有else,则不执行任何操作。 - 多条件判断:可以通过
else if来添加更多的条件分支。 - 复合条件:可以使用逻辑运算符(如
&&、||、!)来组合多个条件。
嵌套 if...else 示例:
java复制if (score >= 90) {
System.out.println("A");
if (score == 100) {
System.out.println("Perfect!");
}
} else if (score >= 80) {
System.out.println("B");
} else {
System.out.println("Not passing");
}
在这个嵌套示例中,首先判断成绩是否为A等级,如果是,进一步判断是否为满分,并打印相应的消息。
if...else 结构是程序设计中实现条件逻辑的核心,它使得程序能够根据不同的条件执行不同的操作。
switch...case
switch...case 是一种条件语句,它允许程序根据不同的值执行不同的代码块。在 Java 中,switch 语句可以提高代码的可读性和维护性,特别是当有多个条件分支时。
基本语法:
javaswitch (expression) {
case value1:
// 当expression等于value1时执行的代码
break;
case value2:
// 当expression等于value2时执行的代码
break;
// 更多的case
default:
// 如果没有匹配的case,执行的代码
}
支持的数据类型:
- 原始数据类型:
byte、short、char、int。注意,long类型和float或double类型的值不能作为switch表达式。 - 字符串(String):Java 7 及以后版本支持字符串类型的
switch表达式。 - 枚举(Enum):Java 7 及以后版本支持枚举类型的
switch表达式。 - 包装类:从 Java 12 开始,基本类型对应的包装类(如
Integer、Long等)也可以用于switch表达式。
示例:
javaint month = 4;
switch (month) {
case 1:
System.out.println("January");
break;
case 2:
System.out.println("February");
break;
case 3:
System.out.println("March");
break;
case 4:
System.out.println("April");
break;
// 更多月份
default:
System.out.println("Invalid month");
}
注意事项:
break语句:每个case后面通常需要一个break语句,以防止执行流程 "穿透" 到后续的case。default子句:是可选的,如果没有匹配的case,并且没有default,则switch语句将不执行任何操作。case值的唯一性:每个case后的值在同一个switch语句中必须是唯一的。- 类型限制:
switch表达式的结果必须是上述支持的数据类型之一,不能是对象或其他复杂类型。
Java 12 引入的 Switch 表达式(预览特性):
从 Java 12 开始,作为预览特性,switch 可以作为表达式使用,这允许 switch 语句直接返回一个值,而不是作为独立的语句存在。
javaString result = switch (month) {
case 1, 2, 3, 4, 5, 6 -> "Half-year 1";
case 7, 8, 9, 10, 11, 12 -> "Half-year 2";
default -> "Invalid month";
};
switch后可以跟那些类型
在Java中,switch 语句可以接受以下几种类型的表达式:
- 原始数据类型:
byteshortcharint
- 字符串(String):
- 从Java 7开始,
switch语句可以接受String类型的表达式。
- 从Java 7开始,
- 枚举(Enum):
- 从Java 7开始,
switch语句可以接受枚举类型的表达式。
- 从Java 7开始,
- 包装类:
- 从Java 12开始,基本类型对应的包装类(如
Integer、Long、Byte等)也可以作为switch表达式。
- 从Java 12开始,基本类型对应的包装类(如
- Java 12引入的模式匹配(预览特性):
- Java 12引入了模式匹配的
switch表达式作为预览特性,它允许更灵活的模式匹配语法。
- Java 12引入了模式匹配的
- Java 13及以后版本的模式匹配:
- Java 13及以后版本继续支持模式匹配的
switch表达式,并作为正式特性。
- Java 13及以后版本继续支持模式匹配的
以下是一些示例,展示 switch 语句可以接受的不同类型的表达式:
java复制// int类型的原始数据类型
int day = 3;
switch (day) {
case 1:
case 2:
case 3:
System.out.println("Weekend");
break;
case 4:
case 5:
System.out.println("Weekday");
break;
default:
System.out.println("Invalid day");
}
// String类型
String fruit = "Apple";
switch (fruit) {
case "Apple":
System.out.println("Apple is red");
break;
case "Banana":
System.out.println("Banana is yellow");
break;
default:
System.out.println("Unknown fruit");
}
// 枚举类型
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Day today = Day.MONDAY;
switch (today) {
case MONDAY:
case FRIDAY:
System.out.println("End of the week");
break;
default:
System.out.println("Just another day");
}
// 包装类(从Java 12开始)
Integer number = 42;
switch (number) {
case 42:
System.out.println("The answer to life, the universe and everything");
break;
default:
System.out.println("Not the number we were looking for");
}
请注意,switch 语句不能直接使用 long、float 或 double 类型的表达式,也不能使用对象引用类型,除非它们是 String 或 Enum。如果需要在 switch 中使用这些类型,可能需要将它们转换为 int 或使用其他条件语句,如 if-else。

浙公网安备 33010602011771号