分支结构

if...else

if...else 是编程中用于条件控制流的基本结构,它允许程序根据不同的条件执行不同的代码块。以下是 if...else 结构的一些关键特点和用法:

基本语法:

javaif (条件) {
    // 条件为真时执行的代码块
} else {
    // 条件为假时执行的代码块
}

关键特点:

  1. 条件判断if 后面跟着的条件(通常是一个布尔表达式)决定了哪个代码块将被执行。
  2. 分支执行:如果条件为 true,则执行 if 代码块;如果条件为 false,则执行 else 代码块。
  3. 单一 else 对应一个 if:每个 else 只与它上面的最近的 if 配对。
  4. 可嵌套使用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 语句判断并打印出对应的成绩等级。

扩展用法:

  • 省略 elseelse 可以省略,如果条件不满足且没有 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,执行的代码
}

支持的数据类型:

  1. 原始数据类型byteshortcharint。注意,long 类型和 floatdouble 类型的值不能作为 switch 表达式。
  2. 字符串(String):Java 7 及以后版本支持字符串类型的 switch 表达式。
  3. 枚举(Enum):Java 7 及以后版本支持枚举类型的 switch 表达式。
  4. 包装类:从 Java 12 开始,基本类型对应的包装类(如 IntegerLong 等)也可以用于 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 语句可以接受以下几种类型的表达式:

  1. 原始数据类型
    • byte
    • short
    • char
    • int
  2. 字符串(String)
    • 从Java 7开始,switch 语句可以接受 String 类型的表达式。
  3. 枚举(Enum)
    • 从Java 7开始,switch 语句可以接受枚举类型的表达式。
  4. 包装类
    • 从Java 12开始,基本类型对应的包装类(如 IntegerLongByte 等)也可以作为 switch 表达式。
  5. Java 12引入的模式匹配(预览特性)
    • Java 12引入了模式匹配的 switch 表达式作为预览特性,它允许更灵活的模式匹配语法。
  6. Java 13及以后版本的模式匹配
    • Java 13及以后版本继续支持模式匹配的 switch 表达式,并作为正式特性。

以下是一些示例,展示 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 语句不能直接使用 longfloatdouble 类型的表达式,也不能使用对象引用类型,除非它们是 StringEnum。如果需要在 switch 中使用这些类型,可能需要将它们转换为 int 或使用其他条件语句,如 if-else

posted @ 2024-07-26 11:04  墨澜  阅读(88)  评论(0)    收藏  举报