1、Java switch
语句语法知识点
Java 中的 switch
语句是一种多分支选择结构,它允许一个变量(或表达式)与多个可能的常量值进行比较,并根据匹配的结果执行相应的代码块。以下是 switch
语句的关键语法点:
-
基本结构:
javaswitch (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
语句的示例,它根据用户输入的字符输出相应的消息:
java
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
语句的具体案例:
案例一:判断星期几
java
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
分支,并输出对应的星期几。
案例二:计算工资扣税
java
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及以下,扣税0
tax = 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
语句不支持浮点数,这里使用了整数除法将工资范围划分到不同的区间。
案例三:根据用户输入执行不同操作
java
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 中的多种用途,包括根据变量的值选择执行不同的代码块、计算不同的结果以及根据用户输入执行不同的操作。