java选择结构语句

文章目录

    • 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 直到遇到 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类型,则解构为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.");
}

在这个例子中,当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私信我😍

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Final Draft 12 for Mac:高效专业剧本创作软件

对于剧本创作者来说&#xff0c;一款高效、专业的写作工具是不可或缺的。Final Draft 12 for Mac就是这样一款完美的选择。这款专为Mac用户设计的剧本创作软件&#xff0c;凭借其卓越的性能和丰富的功能&#xff0c;让您的剧本创作更加得心应手。 Final Draft 12支持多种剧本格…

【C++】CentOS环境搭建-编译安装Boost库(附CMAKE编译文件)

【C】环境搭建-编译安装Boost库 Boost库简介Boost库安装通过YUM安装&#xff08;版本较低 V1.53.0&#xff09;通过编译安装&#xff08;官网最新版本1.85.0&#xff09;1.安装相关依赖2.查询官网下载最新安装包并解压3.编译Boost4.安装Boost库到系统路径 Boost库验证 Boost库简…

(22.12.20)matlab2022+yalmip+cplex安装教程,win11 x64

前言 Hi,你好&#xff01;最近刚刚更换新的电脑设备&#xff0c;安装软件时尽量选择最新版本&#xff0c;但也遇到了大大小小的安装问题&#xff0c;这里把踩到的坑一并总结出来&#xff0c;给出一份还算合理的MATLAByalmipCPLEX安装教程&#xff08;win11&#xff09;。 MAT…

从零入门激光SLAM(十三)——LeGo-LOAM源码超详细解析4

大家好呀&#xff0c;我是一个SLAM方向的在读博士&#xff0c;深知SLAM学习过程一路走来的坎坷&#xff0c;也十分感谢各位大佬的优质文章和源码。随着知识的越来越多&#xff0c;越来越细&#xff0c;我准备整理一个自己的激光SLAM学习笔记专栏&#xff0c;从0带大家快速上手激…

OBS插件--视频回放

视频回放 视频回放是一款源插件&#xff0c;它可以将指定源的视频缓存一段时间&#xff08;时间可以设定&#xff09;&#xff0c;将缓存中的视频添加到当前场景中后&#xff0c;可以快速或慢速不限次数的回放。这个功能在类似体育比赛的直播中非常有用&#xff0c;可以捕获指…

【快讯】山东省第四批软件产业高质量发展重点项目开始申报

为加快落实《山东省高端软件“铸魂”工程实施方案&#xff08;2023-2025&#xff09;》&#xff0c;提高软件产业规模能级&#xff0c;提升关键软件技术创新和供给能力&#xff0c;塑强数字经济发展核心竞争力&#xff0c;确定开展第四批软件产业高质量发展重点项目申报工作&am…

CTF-Web Exploitation(持续更新)

CTF-Web Exploitation 1. GET aHEAD Find the flag being held on this server to get ahead of the competition Hints Check out tools like Burpsuite to modify your requests and look at the responses 根据提示使用不同的请求方式得到response可能会得到结果 使用…

如何通过汽车制造供应商协同平台,提高供应链的效率与稳定性?

汽车制造供应商协同是指在汽车制造过程中&#xff0c;整车制造商与其零部件供应商之间建立的一种紧密合作的关系。这种协同关系旨在优化整个供应链的效率&#xff0c;降低成本&#xff0c;提高产品质量&#xff0c;加快创新速度&#xff0c;并最终提升整个汽车产业的竞争力。以…

面试笔记——JVM组成

基本介绍 JVM: Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 使用JVM的好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收机制 JVM的组成及运行流程&#xff1a; 程序计数器 程序计数器&a…

Zabbix5.0——安装与部署

目录 一、zabbix-server(192.168.206.134) 监控方 1. 环境准备 2.安装zabbix 2.1 准备zabbix-repo 2.2清理缓存 2.3安装zabbix主包&#xff08;服务器和代理&#xff09; 2.4安装zabbix前端包 3. 数据库安装 3.1 授权zabbix账号 3.2导入数据库&#xff08;初始化zabbix&#x…

人工智能驱动的设计工具的兴起:彻底改变创意产业

人工智能驱动的设计工具的兴起&#xff1a;彻底改变创意产业 概述 人工智能 (AI) 正在改变创意产业&#xff0c;设计也不例外。人工智能驱动的设计工具正在彻底改变设计师的工作方式&#xff0c;提供无与伦比的效率、创造力和创新水平。从生成图像和设计到自动化日常任务&…

基于Opencv的车牌识别系统(毕业设计可用)

系统架构 图像采集&#xff1a;首先&#xff0c;通过摄像头等设备捕捉车辆图像。图像质量直接影响后续处理的准确性&#xff0c;因此高质量的图像采集是基础。 预处理&#xff1a;对获取的原始图像进行预处理&#xff0c;包括灰度化、降噪、对比度增强和边缘检测等。这些操作旨…

RS3236-3.3YF5 封装SOT-23-5 线性稳压器 带过温保护

RS3236-3.3YF5 是一款由Runic&#xff08;润石&#xff09;公司生产的线性稳压器&#xff08;LDO&#xff09;&#xff0c;以下是该器件的一些功能和参数介绍&#xff1a; 品牌: Runic 产品类型: 线性稳压器 (LDO) 输入电压范围: 最大 7.5V 输出电压: 固定 3.3V 输出电流: 最大…

基于FPGA的去雾算法

去雾算法的原理是基于图像去模糊的原理&#xff0c;通过对图像中的散射光进行估计和去除来消除图像中的雾霾效果。 去雾算法通常分为以下几个步骤&#xff1a; 1. 导引滤波&#xff1a;首先使用导引滤波器对图像进行滤波&#xff0c;目的是估计图像中散射光的强度。导引滤波器…

介绍适用于 Node.js 的 Elastic OpenTelemetry 发行版

作者&#xff1a;来自 Elastic Trent Mick 我们很高兴地宣布推出 Elastic OpenTelemetry Distribution for Node.js 的 alpha 版本。 该发行版是 OpenTelemetry Node.js SDK 的轻量级包装&#xff0c;可以让你更轻松地开始使用 OpenTelemetry 来观察 Node.js 应用程序。 背景 …

QT与Electron之争:谁能提供更好的用户体验?有一点QT完胜.

QT和Electron到底谁好&#xff0c;争论不休&#xff0c;各有各的道理&#xff0c;贝格前端工场总结了各方观点&#xff0c;做一个梳理。 在比较QT和Electron时&#xff0c;需要考虑到它们各自的特点和适用场景。 QT是一个C的跨平台应用程序开发框架&#xff0c; 而Electron是基…

2024第九届数维杯数学建模论文模板(内附LaTeX+Word)

一年一度的2024年第九届数维杯国赛报名进行中&#xff01;相信很多同学们已经摩拳擦掌蓄势待发了&#xff01; 经历三天比赛&#xff0c;最后提交的论文就是最终答卷&#xff0c;那么一篇数模论文&#xff0c;包括哪些内容呢&#xff1f; 一篇完整的数模论文&#xff0c;包括…

活字格中如何加入JavaScript的代码和事件以及如何调试

活字格&#xff1a; 如何加入JavaScript的代码和事件 1&#xff09;选中组件。 2&#xff09;编辑命令“按钮。 3&#xff09;选择JavaScript命令&#xff0c;并点亮五星。 4&#xff09;编写js代码&#xff0c;确定。 5&#xff09;运行。 如何查看js运行&#xff1a; …

uni-app(二):本地插件使用(Android)

本地插件使用 项目创建等参考1.下载并引用本地插件2.注意插件配置3.制作自定义基座4.编写调用代码5.运行 项目创建等参考 https://lprosper.blog.csdn.net/article/details/138655526 1.下载并引用本地插件 2.注意插件配置 3.制作自定义基座 4.编写调用代码 <template>…

【原创】springboot+mysql物资库存管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…