Java三大流程控制语句之Switch分支
一、switch分支
1.语法结构:
switch(表达式){
case 值1:
...代码块1...
break;
case 值2:
...代码块2...
break;
case 值n:
...代码块n...
break;
default:
...default代码块...
break;
}
2.基本使用
表达式的结果分别和case后面的值比较,哪个相等就执行对应的代码块
如果都不相等就执行default代码块
default代码块根据需求可写可不写
break的作用是跳出整个switch分支
public class 文件名{
public static void main(String[] args){
switch(100){
case 10:
System.out.println("10");
break;
case 50:
System.out.println("50");
break;
case 100:
System.out.println("100");//100
break;
default:
System.out.println("default代码块");
break;
}
System.out.println("switch分支以外的代码");
}
}
3.案例:小西参加计算机编程大赛
如果获得第一名,将参加1个月马尔代夫旅游
如果获得第二名,将奖励苹果Pro笔记本电脑一部
如果获得第三名,将奖励移动硬盘一个
否则,通宵补课
import java.util.Scanner;
public class 文件名{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入比赛名次:");
String str = scan.next();
switch(str){
case "第一名":
System.out.println("参加的1个月马尔代夫旅游");
break;
case "第二名":
System.out.println("奖励苹果Pro笔记本电脑一部");
break;
case "第三名":
System.out.println("奖励移动硬盘一个");
break;
default:
System.out.println("通宵补课");
break;
}
}
}
4.深入使用
经典面试题:
1.case的值可以相同吗?
case的值不能相同
2.case的值可以是不同类型吗?
可以,但是类型之间必须兼容
3.default可以省略吗?
可以省略
4.break可以省略吗
可以省略
5.default的位置一定要在最后吗?
不一定,但是为了代码的可读性,最好放在最后
6.表达式值的类型可以是什么?
byte、short、int、char、字符串(JDK1.7)、枚举(JDK1.5)
7.表达式的类型为什么只有byte、short、int、char、字符串、枚举?
因为switch底层只能识别int类型
byte类型:自动向上转型成int类型
short类型:自动向上转型成int类型
char类型:获取字符的ASCII(int类型)
String类型:获取字符串的hash码(int类型)
枚举类型:获取枚举对象中的编号(int类型)
例题:
public class 文件名{
public static void main(String[] args){
switch(97){
case 10:
System.out.println("10");
break;
case 'a'://自动转换成ASCII(int类型)
System.out.println('a');
break;
case 50:
System.out.println("50");
break;
case 100:
System.out.println("100");
break;
default:
System.out.println("default代码块");
break;
}
}
}
5.需求:输入年和月,输出当月的天数
分析:
1、3、5、7、8、10、12月 – 31天
4,、6、9、11月 – 30天
2月 - 闰年29天、平年28天
年份被4整除并且不被100整除 或者 年份被400整除就为闰年
import java.util.Scanner;
public class 文件名{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
int day = 0;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
case 2:
if((year%4==0 && year%100!=0) || (year%400==0)){//闰年
day = 29;
}else{
day = 28;
}
break;
}
if(day != 0){//说明用户是正常输入
System.out.println(year + "年" + month + "月的天数为:" + day + "天");
}else{
System.out.println("数据有误");
}
}
}