1、Java switch
语句语法知识点
Java 中的 switch
语句是一种多分支选择结构,它允许一个变量(或表达式)与多个可能的常量值进行比较,并根据匹配的结果执行相应的代码块。以下是 switch
语句的关键语法点:
-
基本结构:
switch (expression) {case value1:// 当 expression 等于 value1 时执行的代码break; // 可选,但通常建议加上以避免“贯穿”(fall-through)case value2:// 当 expression 等于 value2 时执行的代码break;// 可以有任意数量的 case 语句default:// 当 expression 不匹配任何 case 时执行的代码break; // 可选,但如果是最后一个语句则通常省略 }
-
表达式类型:
- 在 Java 7 及更早版本中,
switch
语句中的表达式必须是char
、byte
、short
、int
、Character
、Byte
、Short
、Integer
、String
或枚举类型。 - 从 Java SE 7 开始,
switch
语句支持String
类型。 - 从 Java 12 开始,引入了增强的
switch
表达式(预览特性,后在 Java 14 中成为正式特性),允许返回值,并且可以使用yield
关键字代替break
。
- 在 Java 7 及更早版本中,
-
贯穿(fall-through):
- 如果一个
case
块没有break
语句,那么程序将继续执行下一个case
块(如果有的话),直到遇到break
或switch
语句的末尾。 - 这通常是不期望的行为,因此建议每个
case
块都以break
结尾(除非你有意利用贯穿特性)。
- 如果一个
-
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 中的多种用途,包括根据变量的值选择执行不同的代码块、计算不同的结果以及根据用户输入执行不同的操作。