Java学习教程,从入门到精通,Java switch语句语法知识点(14)

1、Java switch 语句语法知识点

Java 中的 switch 语句是一种多分支选择结构,它允许一个变量(或表达式)与多个可能的常量值进行比较,并根据匹配的结果执行相应的代码块。以下是 switch 语句的关键语法点:

  1. 基本结构

    switch (expression) {case value1:// 当 expression 等于 value1 时执行的代码break; // 可选,但通常建议加上以避免“贯穿”(fall-through)case value2:// 当 expression 等于 value2 时执行的代码break;// 可以有任意数量的 case 语句default:// 当 expression 不匹配任何 case 时执行的代码break; // 可选,但如果是最后一个语句则通常省略
    }
    
  2. 表达式类型

    • 在 Java 7 及更早版本中,switch 语句中的表达式必须是 charbyteshortintCharacterByteShortIntegerString 或枚举类型。
    • 从 Java SE 7 开始,switch 语句支持 String 类型。
    • 从 Java 12 开始,引入了增强的 switch 表达式(预览特性,后在 Java 14 中成为正式特性),允许返回值,并且可以使用 yield 关键字代替 break
  3. 贯穿(fall-through)

    • 如果一个 case 块没有 break 语句,那么程序将继续执行下一个 case 块(如果有的话),直到遇到 breakswitch 语句的末尾。
    • 这通常是不期望的行为,因此建议每个 case 块都以 break 结尾(除非你有意利用贯穿特性)。
  4. default 语句

    • default 语句是可选的,但它提供了一种处理所有不匹配 case 的情况的方法。
    • default 语句可以放在 switch 语句中的任何位置,但通常放在最后。

具体案例

以下是一个使用 Java switch 语句的示例,它根据用户输入的字符输出相应的消息:

import java.util.Scanner;public class SwitchExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个字符(A, B, C 或其他):");char inputChar = scanner.next().charAt(0); // 读取用户输入的第一个字符switch (inputChar) {case 'A':System.out.println("你输入了 A");break;case 'B':System.out.println("你输入了 B");break;case 'C':System.out.println("你输入了 C");break;default:System.out.println("你输入的不是 A、B 或 C");break;}scanner.close();}
}

在这个例子中,程序首先提示用户输入一个字符,然后使用 switch 语句根据输入的字符执行相应的代码块。如果用户输入的是 ‘A’、‘B’ 或 ‘C’,程序将输出相应的消息。如果用户输入的是其他字符,程序将执行 default 代码块并输出一条不同的消息。

当然可以,以下是一些使用 Java switch 语句的具体案例:

案例一:判断星期几

public class WeekdayExample {public static void main(String[] args) {int day = 3; // 假设今天是星期三String dayName;switch (day) {case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;case 4:dayName = "Thursday";break;case 5:dayName = "Friday";break;case 6:dayName = "Saturday";break;case 7:dayName = "Sunday";break;default:dayName = "Invalid day";break;}System.out.println("Today is: " + dayName);}
}

在这个例子中,switch 语句根据变量 day 的值选择相应的 case 分支,并输出对应的星期几。

案例二:计算工资扣税

import java.util.Scanner;public class TaxCalculation {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入工资(元):");double salary = scanner.nextDouble();double tax = 0;switch ((int) (salary / 1000)) { // 根据工资范围计算扣税比例case 0:case 1:case 2:case 3: // 工资3500及以下,扣税0tax = 0;break;case 4: // 工资3501-5000之间,扣税0.1%的超出部分tax = (salary - 3500) * 0.001;break;case 5: // 工资5001-8000之间,前3500不扣税,3501-5000扣0.1%,5001-8000扣0.2%tax = (5000 - 3500) * 0.001 + (salary - 5000) * 0.002;break;case 6: // 工资8001-10000之间,类似计算tax = (5000 - 3500) * 0.001 + (8000 - 5000) * 0.002 + (salary - 8000) * 0.003;break;default: // 工资10000以上tax = (5000 - 3500) * 0.001 + (8000 - 5000) * 0.002 + (10000 - 8000) * 0.003 + (salary - 10000) * 0.004;break;}System.out.printf("应扣税额为:%.2f元\n", tax);scanner.close();}
}

注意:这个例子中的扣税计算是简化的,实际扣税规则可能更复杂。此外,由于 switch 语句不支持浮点数,这里使用了整数除法将工资范围划分到不同的区间。

案例三:根据用户输入执行不同操作

import java.util.Scanner;public class OperationSelector {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入操作选项(1: 加法,2: 减法,3: 乘法,4: 除法):");int option = scanner.nextInt();double num1, num2, result;System.out.print("请输入第一个数字:");num1 = scanner.nextDouble();System.out.print("请输入第二个数字:");num2 = scanner.nextDouble();switch (option) {case 1:result = num1 + num2;System.out.printf("结果是:%.2f\n", result);break;case 2:result = num1 - num2;System.out.printf("结果是:%.2f\n", result);break;case 3:result = num1 * num2;System.out.printf("结果是:%.2f\n", result);break;case 4:if (num2 != 0) {result = num1 / num2;System.out.printf("结果是:%.2f\n", result);} else {System.out.println("除数不能为零!");}break;default:System.out.println("无效的操作选项!");break;}scanner.close();}
}

在这个例子中,switch 语句根据用户输入的操作选项执行相应的数学运算,并输出结果。
这些案例展示了 switch 语句在 Java 中的多种用途,包括根据变量的值选择执行不同的代码块、计算不同的结果以及根据用户输入执行不同的操作。

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

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

相关文章

在manjaro 2024里使用yay命令安装ROS2

不建议这么安装,研究了两天以失败告终。要不就手动编译吧。。。(在系统环境良好的情况下,最好是刚装完系统就装ROS)真的太多不适配了,旧有的很多yay包都会遇到一些奇怪的问题: 0.一开始就会遇到网络卡住的…

人工智能原理实验一:知识的表示与推理实验

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等有…

自研小程序-心情追忆

在近期从繁忙的工作中暂时抽身之后,我决定利用这段宝贵的时间来保持我的Java技能不致生疏,并通过一个个人项目来探索人工智能的魅力。 我在Hugging Face(国内镜像站点:HF-Mirror)上发现了一个关于情感分析的练习项目&…

贪心算法入门(一)

1.什么是贪心算法? 贪心算法是一种解决问题的策略,它将复杂的问题分解为若干个步骤,并在每一步都选择当前最优的解决方案,最终希望能得到全局最优解。这种策略的核心在于“最优”二字,意味着我们追求的是以最少的时间和…

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误

FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误 测试环境1、 MYODBC 3.51.18 or higher2、分析和解决2.1 解决1,降级MySQL ODBC2.2 解决2,修改FreeSWITCH代码 测试环境 http://myfs.f3322.net:8020/ 用户名:admin,密…

四、k8s快速入门之Kubernetes资源清单

kubernetes中的资源 ⭐️ k8s中所有的内容都抽象为资源,资源实列化之后,叫做对象 1️⃣名称空间级别 ⭐️ kubeadm在执行k8s的pod的时候会在kube-system这个名称空间下执行,所以说当你kubectl get pod 的时候是查看不到的查看的是默认的po…

Java面试经典 150 题.P88. 合并两个有序数组(001)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解 class Solution {public void merge(int[] nums1, int m, int[] nums2, …

[LeetCode-55]基于贪心算法的跳跃游戏的求解(C语言版)

/* 题目出处:LeetCode 题目序号:55. 跳跃游戏 题目叙述:给你一个非负整数数组 nums ,你最初位于数组的第一个下标位置 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可…

CentOS9 Stream 设置禁用IPV6

CentOS9 Stream 设置禁用IPV6 方法 1: 修改 sysctl 配置方法 2: 使用 NetworkManager方法 3: 禁用内核参数验证 IPv6 是否禁用 在 CentOS 9 Stream 中,您可以通过以下步骤禁用 IPv6: 方法 1: 修改 sysctl 配置 编辑 sysctl 配置文件: 打开 /…

FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化)

FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化) Timequest中Data Path分析 Data Arrival Path clock path:时钟信号到达源寄存器时钟端口的时间 data path:数据从源寄存器Q端口出发到达目标寄存器D端口的时间 D…

四、鸿蒙开发-常用布局(线性布局、层叠布局、弹性布局、网格布局、列表布局)

提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、布局基础1.1 盒子模型 二、线性布局(Column/Row)2.1 概述2.2…

泷羽sec-安全见闻(9)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章。 视频地址: https://www.bilibili.com/video/BV1PH1FYZE1H 1. 二进制的基本概念 二进制是计算技术中广泛采用的一种数值二进制的基本概念:二进制是计算技术中广泛采用…

单个相机矫正畸变

1、通过标定助手获取到内参外参,外参在此无效,只用到了内参 2、然后通过halcon算子进行矫正 参考:超人视觉

unity 中使用zeroMq和Mqtt 进行通讯

最近我在做一个车上的HMI项目,也就是车机应用,需要与云端和域控进行通信。HMI的功能已经外包了,但消息的统一层留给我自己来做。因为项目组其他人都没有经验,所以这个任务就落到了我头上,尽管我自己也没有太多经验&…

掌握ElasticSearch(六):分析过程

文章目录 一、什么是分析1. 字符过滤 (Character Filtering)2. 分词 (Breaking into Tokens)3. 词条过滤 (Token Filtering)4. 词条索引 (Token Indexing) 二、内置分析器分类1. 标准分析器 (Standard Analyzer)2. 简单分析器 (Simple Analyzer)3. 语言分析器 (Language Analyz…

C++ 之 VS2010 和MySQL数据库的链接问题

C 之 VS2010 和MySQL数据库的链接问题 代码vc的设置数据库的相关操作VC编程 代码 #include <winsock.h> #include #include #include <mysql.h> using namespace std; #pragma comment(lib, “ws2_32.lib”) #pragma comment(lib, “libmysql.lib”) //单步执…

LabVIEW Modbus通讯稳定性提升

在LabVIEW开发Modbus通讯程序时&#xff0c;通讯不稳定是一个常见问题&#xff0c;可能导致数据丢失、延迟或错误。为了确保通讯的可靠性&#xff0c;可以从多个角度进行优化&#xff0c;以下是一些有效的解决方案&#xff0c;结合实际案例进行分析。 1. 优化通讯参数设置 通讯…

数据库安装使用

文章目录 一、目的二、原理三、过程 一、目的 Mysql数据库的解压Mysql数据库的的配置Mysql数据库的使用 二、原理 MySQL是一个关系型数据库管理系统&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#xff0c;关系数据…

实时数据处理:技术支持和优势

在当今快节奏的数字世界中&#xff0c;企业不断寻找在竞争中保持领先地位的方法。批量和近实时的数据处理方法已经无法满足企业对于数据处理速度要求了。因此实时数据处理出现&#xff0c;逐渐帮助企业获取更快速的决策能力。本文&#xff0c;我们将深入研究实时处理&#xff0…

HCIP--以太网交换安全(总实验)

实验背景 假如你是公司的网络管理员&#xff0c;为了提高公司网络安全性&#xff0c;你决定在接入交换机部署一些安全技术&#xff1a;端口隔、端口安全、DHCP snooping、IPSG。 实验拓扑图 实验的要求&#xff1a; 1.在R1、R2连接在GE0/0/1和GE0/0/2接口下&#xff0c;均划…