【老韩b站视频笔记p114-p120】
1. switch
1.1 基本语法
【6点注意】
- switch 关键字,表示swtich分支
- 表达式(一定会有个值返回)
- case 常量1:当表达式的值等于常量1,就执行 语句块1
- break :表示退出swtich
- 如果和 case 常量1 匹配,就执行语句块1,如果没有匹配,就继续匹配case常量2。
- 如果一个都没有匹配上,就执行default。
1.2 流程图
没有break就穿透执行语句块2。
1.3 快速入门
- 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
- a 表示星期一,b 表示星期二 …
- 根据用户的输入显示相应的信息.要求使用 switch 语句完成。
public class var01 {
//编写一个main方法
public static void main(String[] args) {
//思路分析
//1. 接收一个字符,创建Scanner对象
//2. 使用switch来完成匹配,并输出对应的信息。
import java.util.Scanner;
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g)");
char c1 = myScanner.next().cahrAt(0);
//在java中只要有值返回就是一个表达式。
switch(c1) {
case 'a':
System.out.println("今天星期一");
break;
case 'b':
System.out.println("今天星期二");
break;
case 'c':
System.out.println("今天星期三");
break;
case 'd':
System.out.println("今天星期四");
break;
case 'e':
System.out.println("今天星期五");
break;
case 'f':
System.out.println("今天星期六");
break;
case 'g':
System.out.println("今天星期七");
break;
default:
System.out.println("输入错误,没有匹配");
}
System.out.println("退出switch,继续执行程序。")
}
}
1.4 switch使用细节
- 表达式数据类型,应和case 后的常量类型一致,或者可以自动转成可以相互比较的类型,比如輸入的是字符,而常量是 int。
- switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum枚举,String)。
- case子句中的值必须是常量 / 常量表达式,而不能是变量。
- default子句是可选的(可以不写default),当没有匹配的case时,执行default。【无default&无匹配,则没有任何输出】
- brealk语句用来在执行完一个case分支后使程序跳出switch语句块。如果没有break,程序会顺序执行到switch结尾,除非遇到break(穿透)。
1.5 练习
- 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”。
public class var01 {
//编写一个main方法
public static void main(String[] args) {
//第一题
import java.util.Scanner;
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入a-e");
char c1 = myScanner.next().cahrAt(0);
//在java中只要有值返回就是一个表达式。
switch(c1) {
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other")
}
}
}
- 对学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。(注:输入的成绩不能大于100),提示成绩/60
public class var01 {
//编写一个main方法
public static void main(String[] args) {
//第2题
//思路分析:
//1. 成绩在【60,100】,(int)(成绩/60)=1
// 成绩在【0,60),(int)(成绩/60)=0
//2. 用if语句,只有成绩在【0,100】才执行switch。
double score = 88.0;
if(score >= 0 && score <= 100) {
switch((int)(score / 60)) {
case 0:
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
}
} else {
System.out.println("输入错误")
}
}
}
- 根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 [课堂练习, 提示 使用穿透 ]
public class var01 {
//编写一个main方法
public static void main(String[] args) {
//第3题
//思路分析:
//1. 创建Scanner对象,接收用户输入
//2. 使用int month接收。
//3. 使用switch匹配,使用穿透,笔记哦啊简洁
import java.util.Scanner;
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入月份");
int month = myScanner.nextInt();
switch(month) {
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System,out.println("输入错误,请输入1-12")
}
}
}
1.6 switch和if的比较
- 如果判断的具体数值不多,而且符合byte、short、int、char,enum[枚举],String这6种类型。虽然两个语句都可 以使用,建议使用 swtich 语句。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。