java选择结构语句

发布于:2024-05-10 ⋅ 阅读:(23) ⋅ 点赞:(0)

Java选择结构语句的几种形式

Java中的选择结构语句主要用于基于不同条件执行不同的代码块。主要有以下几种形式:

1. if 单选择结构:

当需要根据一个条件决定是否执行某段代码时使用。

if (条件) {
    // 条件为true时执行的代码
}

2. if-else 双选择结构:

当有两个互斥的执行路径时使用。

if (条件) {
    // 条件为true时执行的代码
} else {
    // 条件为false时执行的代码
}

3. if-else if 多选择结构:

用于多个条件判断,当一个条件满足时,执行对应代码块,并跳出整个if结构。

if (条件1) {
    // 条件1为true时执行的代码
} else if (条件2) {
    // 条件1为false且条件2为true时执行的代码
} else if (条件3) {
    // 如果前面条件都不满足,且条件3为true时执行的代码
} else {
    // 所有条件都不满足时执行的代码
}

4. switch 选择结构:

适用于基于某个变量的不同取值执行不同代码块的情况。

switch (变量) {
    case 常量1:
        // 变量等于常量1时执行的代码
        break;
    case 常量2:
        // 变量等于常量2时执行的代码
        break;
    // 可以有多个case
    default:
        // 如果没有匹配的case时执行的代码
}

在使用选择结构时,需要注意以下几点:

  • 条件判断后的代码块应使用大括号 {} 括起来,即使只有一行代码,也推荐这样做以增强代码的可读性和避免潜在错误。
  • switch 语句中的 case 后面必须跟一个常量表达式,且在 switch 中不能有重复的 case 值。
  • switch 语句中,break 语句用于结束当前 case 并跳出 switch 结构,如果不使用 break,程序会继续执行下一个 case 直到遇到 breakswitch 结束。
  • Java 12及更高版本中,还可以使用 switch 表达式,它可以直接返回一个值,语法更加简洁灵活。

让我们继续深入探讨Java中的选择结构和其他相关高级话题。

Java 12及更高版本的Switch Expressions

从Java 12开始,Java引入了更加灵活和强大的switch表达式,它不仅可以作为语句使用,还能作为表达式直接返回一个值。这使得代码更加简洁、易读,并且在某些情况下,减少了对break语句的依赖。下面是switch表达式的几个关键特性:

返回值的Switch表达式

String day = "Monday";
String result = switch (day) {
    case "Monday", "Friday" -> "Work hard!";
    case "Saturday", "Sunday" -> "Relax!";
    default -> "It's just another day.";
};
System.out.println(result);

在这个例子中,switch表达式根据day的值返回不同的字符串,注意这里使用了逗号分隔来合并多个case分支,并且不需要显式地写出break

yield关键字

switch表达式中,yield关键字用于从某个分支返回一个值。如果一个分支没有包含yield,则编译器会报错。

int number = 3;
String result = switch (number) {
    case 1 -> "One";
    case 2 -> "Two";
    case 3 -> {
        System.out.println("Processing case 3...");
        yield "Three"; // 使用yield返回值
    }
    default -> "Other";
};
System.out.println(result);

使用Switch作为语句或表达式

虽然Java 12开始推荐使用switch作为表达式,但传统的switch语句依然可用,特别是在不涉及返回值的情况下。选择哪种形式取决于具体需求。

Pattern Matching for instanceof (Java 16+)

自Java 16起,引入了模式匹配的instanceof操作符,允许在instanceof判断后直接解构对象并赋值给变量,简化了类型转换和判空的操作。

Object obj = getObject(); // 假设此方法返回Object类型的实例

if (obj instanceof String s) { // 如果obj是String类型,则解构为s
    System.out.println(s.length());
} else if (obj instanceof Integer i) { // 如果obj是Integer类型,则解构为i
    System.out.println(i.doubleValue());
} else {
    System.out.println("Not a String or Integer.");
}

在这个例子中,当objString类型时,直接将其转换并赋值给s;同理,如果是Integer类型,则赋值给i。这种方式减少了代码的冗余,提高了可读性。

总结

Java的选择结构是控制程序流程的基础,从基础的if-else到高级的switch表达式,再到模式匹配的instanceof,这些结构为处理多种条件分支提供了灵活而强大的手段。随着Java版本的演进,这些结构也在不断进化,以更好地支持现代编程的需求。掌握这些内容对于编写高效、清晰的Java代码至关重要。

Java选择结构在实际编程中的应用。

接下来通过几个实用案例来展示Java选择结构在实际编程中的应用。

1. 用户角色权限判断

假设在一个系统中,根据用户角色显示不同的功能菜单。

enum UserRole {
    ADMIN, MODERATOR, USER
}

public class RoleBasedMenu {
    public static void displayMenu(UserRole role) {
        switch (role) {
            case ADMIN:
                System.out.println("Admin Menu: Manage Users, Manage Content, View Reports");
                break;
            case MODERATOR:
                System.out.println("Moderator Menu: Approve Content, Manage Comments");
                break;
            case USER:
                System.out.println("User Menu: Read Content, Comment");
                break;
            default:
                System.out.println("Unknown Role");
        }
    }

    public static void main(String[] args) {
        UserRole currentUserRole = UserRole.ADMIN;
        displayMenu(currentUserRole);
    }
}

2. 订单状态处理

在电商系统中,根据订单的不同状态执行相应的业务逻辑。

enum OrderStatus {
    PENDING, PAID, SHIPPED, DELIVERED, CANCELLED
}

public class OrderProcessor {
    public void processOrder(OrderStatus status) {
        if (status == OrderStatus.PAID) {
            System.out.println("Initiate shipping process.");
        } else if (status == OrderStatus.SHIPPED) {
            System.out.println("Notify customer about shipment.");
        } else if (status == OrderStatus.DELIVERED) {
            System.out.println("Mark order as completed.");
            // 可能还有退款、评价等后续操作
        } else if (status == OrderStatus.CANCELLED) {
            System.out.println("Process refund.");
        } else if (status == OrderStatus.PENDING) {
            System.out.println("Awaiting payment confirmation.");
        } else {
            System.out.println("Invalid order status.");
        }
    }

    public static void main(String[] args) {
        OrderProcessor processor = new OrderProcessor();
        processor.processOrder(OrderStatus.PAID);
    }
}

3. 学生成绩等级划分

根据学生的考试分数划分成绩等级。

public class GradeCalculator {
    public String calculateGrade(int score) {
        return switch (score / 10) {
            case 10, 9 -> "A";
            case 8 -> "B";
            case 7 -> "C";
            case 6 -> "D";
            default -> "F";
        };
    }

    public static void main(String[] args) {
        GradeCalculator calculator = new GradeCalculator();
        System.out.println(calculator.calculateGrade(85)); // 应输出 'B'
    }
}

以上案例展示了在实际应用场景中,如何利用Java的选择结构(包括if-elseswitch)来根据不同的条件执行相应的逻辑,从而实现程序的动态行为。

4. 天气预报应用

考虑一个天气预报应用,根据当天的天气情况提供给用户不同的建议。

public class WeatherAdvisor {
    public String giveAdvice(String weatherCondition) {
        return switch (weatherCondition.toLowerCase()) {
            case "sunny" -> "It's sunny outside. Perfect day for a picnic!";
            case "rainy" -> "Remember to carry an umbrella. It's going to rain.";
            case "cloudy" -> "Cloudy day, might be a good idea to bring a light jacket.";
            case "snowy" -> "Stay warm and drive safely; the roads might be slippery.";
            default -> "Weather condition not recognized. Please check your input.";
        };
    }

    public static void main(String[] args) {
        WeatherAdvisor advisor = new WeatherAdvisor();
        System.out.println(advisor.giveAdvice("Sunny")); // 输出: It's sunny outside. Perfect day for a picnic!
    }
}

5. 购物车结算优惠计算

在线购物平台中,根据用户购买的商品总金额提供不同的折扣。

public class DiscountCalculator {
    public double calculateDiscount(double totalAmount) {
        if (totalAmount >= 500 && totalAmount < 1000) {
            return totalAmount * 0.1; // 10% discount
        } else if (totalAmount >= 1000 && totalAmount < 2000) {
            return totalAmount * 0.15; // 15% discount
        } else if (totalAmount >= 2000) {
            return totalAmount * 0.2; // 20% discount
        } else {
            return 0; // No discount for amounts less than 500
        }
    }

    public static void main(String[] args) {
        DiscountCalculator calculator = new DiscountCalculator();
        double totalAmount = 1500.0;
        System.out.printf("Your discount is: %.2f%n", calculator.calculateDiscount(totalAmount)); // 输出: Your discount is: 225.00
    }
}

6. 图书分类展示

假设有一个图书管理系统,需要根据图书的类型展示不同的封面设计。

public class BookCoverDesigner {
    public String getCoverDesign(String bookGenre) {
        return switch (bookGenre.toLowerCase()) {
            case "fantasy" -> wanx(" prompt: A mystical forest with magical creatures, book title: 'Fantasy Realm' ");
            case "mystery" -> wanx(" prompt: An old library with dim lighting, book title: 'The Unsolved Enigma' ");
            case "romance" -> wanx(" prompt: A sunset beach with two silhouettes, book title: 'Love's Dusk' ");
            default -> "Standard cover design for unknown genre.";
        };
    }

    public static void main(String[] args) {
        BookCoverDesigner designer = new BookCoverDesigner();
        String fantasyCoverPrompt = designer.getCoverDesign("Fantasy");
        System.out.println(fantasyCoverPrompt);
    }
}

请注意,在实际运行第6个案例时,由于我无法直接调用外部API,您需要自行替换wanx函数的调用来获取真实的图像URL。不过,这个案例展示了如何根据不同的条件(这里是图书类型)动态生成或选择不同的内容(如封面设计)。

😍😍 大量H5小游戏、微信小游戏、抖音小游戏源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到