- switch语句也属于选择结构,也是分支语句。
- 一个比较完整的switch语句应该这样编写:
switch(int或String类型的字面值或变量){
case int或String类型的字面值或变量:
java语句;
java语句;
java语句;
…
break;
case int或String类型的字面值或变量:
java语句;
java语句;
java语句;
…
break;
case int或String类型的字面值或变量:
java语句;
java语句;
java语句;
…
break;
case int或String类型的字面值或变量:
java语句;
java语句;
java语句;
…
break;
…
deflut:
java语句;
…
} - switch语句的执行原理:
swich后面小括号当中的“数据”和case后面的“数据”进行一一匹配,匹配成功的分支执行。
按照自上而下的顺序依次匹配。 - 匹配成功的分支执行,分支当中最后有“break;”语句的的话,整个switch语句终止。
- 匹配成功的分支执行,分支当中没有“break;”语句的话,直接进入到下一个分支执行(不进行匹配),这种现象被称为case穿透现象。【提供break;语句可以避免穿透】
- 所有的分支都没有匹配成功,当有default的语句的话,会执行default分支当中的程序。
- switch后面和case后面只能是int或者String类型的数据,不能是探测其他类型。
- 当然byte,short,char也可以直接写到switch和case后面,因为他们可以进行自动类型转换。byte,short,char可以自动类型转换成int类型。
- JDK6的,switch和case后面只能探测int类型。
- JDK7之后包括7版本在内,引入新特性,switch关键字和case关键字后面可以探测int或String类型的数据。
- case可以合并:
int i=10;
switch(i){
case 1:case 2: case 3:case10:
System.out.println(“Test Code!”);
代码测试(一)
public class IfTest04 {
public static void main(String[] args) {
// long a = 10L;
// int b=a;//编译报错
// long x=100L;
// switch (x){}//编译报错
//解决编译错误
long x = 100L;
switch ((int) x) {
}
byte b = 10;
switch (b) {
}
short s = 10;
switch (s) {
}
char c = 'A';
switch (c) {
}
char cc = 97;
switch (cc) {
}
//编译报错
//swich(true){}
String username = "zhangsan";
switch (username) {
}
/*
较完整的switch语句
*/
//接受用户输入
//1 表示星期一
//2 表示星期二
//...
//7 表示星期日
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out.print("请输入数字:");
int num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("对不起,您输入的数字非法");
break;
}
System.out.println("============================================");
//case穿透
switch (num) {
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
case 4:
System.out.println("星期四");
case 5:
System.out.println("星期五");
case 6:
System.out.println("星期六");
case 7:
System.out.println("星期日");
default:
System.out.println("对不起,您输入的数字非法");
}
System.out.println("================================================");
//case合并
switch (num) {
case 1:
case 0:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("对不起,您输入的数字非法");
break;
}
}
}
代码测试(二)
import java.util.Scanner;
public class SwitchTest01 {
/*
switch确实可以探测String类型,这是Java 7的新特性。
*/
public static void main(String[] args) {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入星期几:");
String dayOfWeek = s.next();
switch (dayOfWeek) {
case "星期一":
System.out.println(1);
break;
case "星期二":
System.out.println(2);
break;
default:
System.out.println("对不起,您输入的数据非法");
}
}
}
代码测试(三)
public class SwitchTest02 {
public static void main(String[] args) {
//char c='A';
//char c='B';
//char c='C';
char c = 66;
//char c = 'D';
switch (c) {
case 'A':
System.out.println("高级");
break;
case 'B':
System.out.println("中级");
break;
case 'C':
System.out.println("初级");
break;
default:
System.out.println("出错了");
}
switch (c) {
case 'A':
System.out.println("高级");
break;
case 66:
System.out.println("中级");
break;
case 'C':
System.out.println("初级");
break;
default:
System.out.println("出错了");
}
}
}
代码测试(四)
public class SwitchTest03 {
/*
实现计算器当中的
+
-
*
/
实现思路:
1.选择所有的数据从键盘输入
2.使用switch语句进行判断
3.需要从控制台输入三次:
* 第一个数字
* 运算符
* 第二个数字
最终在控制台上是这样的一个场景:
欢迎使用简单计算器系统:
请输入第一个数字:10
请输入运算符:+
请输入第二个数字:20
运算结果:10 + 20 = 30
*/
public static void main(String[] args) {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("欢迎使用简单计算器系统");
System.out.print("请输入第一个数字:");
int num1 = s.nextInt();
System.out.print("请输入运算符:");
String operator = s.next();
System.out.print("请输入第二个数字:");
int num2 = s.nextInt();
int result = 0;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
case "%":
result = num1 % num2;
break;
}
System.out.println("运算结果为:" + num1 + operator + num2 + "=" + result);
}
}
代码测试(五)
public class SwitchTest04 {
/*
* 假设系统给定考生成绩,请判断考生的成绩等级:
* 1.有效成绩范围:[0-100]
* 2.考试成绩可能带小数
* 3.考试成绩和等级之间的对照关系:
* [90-100] A
* [80-90] B
* [70-80] C
* [60-70] D
* [0-60] E
* 4.以上需求必须采用switch语句完成,不能使用if。
* 窍门:(int)(成绩 / 10)
* 0
* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* */
public static void main(String[] args) {
//考生成绩
//double score=90.5;
//double score=100;
//double score=60.5;
double score = 59.9;
//转换成int
int grade = (int) (score / 10);
switch (grade){
case 9: case 10:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
System.out.println("C");
break;
case 6:
System.out.println("D");
break;
default:
System.out.println("E");
}
}
}
资料来源:
【Java零基础教程视频(适合Java 0基础,Java初学入门)】 https://www.bilibili.com/video/BV1Rx411876f/?p=66&share_source=copy_web&vd_source=9bce191eb50f06ae83cb422d8b7f8f31