文章目录
- Java选择结构语句的几种形式
- 1. **if 单选择结构**:
- 2. **if-else 双选择结构**:
- 3. **if-else if 多选择结构**:
- 4. **switch 选择结构**:
- Java 12及更高版本的Switch Expressions
- 返回值的Switch表达式
- yield关键字
- 使用Switch作为语句或表达式
- Pattern Matching for `instanceof` (Java 16+)
- 总结
- Java选择结构在实际编程中的应用。
- 1. 用户角色权限判断
- 2. 订单状态处理
- 3. 学生成绩等级划分
- 4. 天气预报应用
- 5. 购物车结算优惠计算
- 6. 图书分类展示
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;// 可以有多个casedefault:// 如果没有匹配的case时执行的代码
}
在使用选择结构时,需要注意以下几点:
- 条件判断后的代码块应使用大括号
{}
括起来,即使只有一行代码,也推荐这样做以增强代码的可读性和避免潜在错误。 switch
语句中的case
后面必须跟一个常量表达式,且在switch
中不能有重复的case
值。- 在
switch
语句中,break
语句用于结束当前case
并跳出switch
结构,如果不使用break
,程序会继续执行下一个case
直到遇到break
或switch
结束。 - 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类型,则解构为sSystem.out.println(s.length());
} else if (obj instanceof Integer i) { // 如果obj是Integer类型,则解构为iSystem.out.println(i.doubleValue());
} else {System.out.println("Not a String or Integer.");
}
在这个例子中,当obj
是String
类型时,直接将其转换并赋值给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-else
和switch
)来根据不同的条件执行相应的逻辑,从而实现程序的动态行为。
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。不过,这个案例展示了如何根据不同的条件(这里是图书类型)动态生成或选择不同的内容(如封面设计)。
————————————————
最后我们放松一下眼睛