Java switch-case选择结构(二)
案例5:根据指定的月份输出对应季节
/** * 3,4,5 春季 * 6,7,8 夏季 * 9,10,11 秋季 * 12,1,2 冬季 * * @param month */ public static void switchMonth(int month) { switch (month) { case 1: case 2: case 12: System.out.println("冬季"); case 3: case 4: case 5: System.out.println("春季"); case 6: case 7: case 8: System.out.println("夏季"); case 9: case 10: case 11: System.out.println("冬季"); } }
使用if-else实现
if ((month == 1) || (month == 2) || (month == 12)) { System.out.println("冬季"); } else if ((month == 3) || (month == 4) || (month == 5)) { System.out.println("春季"); } else if ((month == 6) || (month == 7) || (month == 8)) { System.out.println("夏季"); } else if ((month == 9) || (month == 10) || (month == 11)) { System.out.println("秋季"); } else { System.out.println("你输入的月份有误"); }
if-else语句与switch-case语句比较
- 结论:凡是使用switch-case的结构都可以转换为if-else结构。反之,不成立。
- 开发经验:如果既可以使用switch-case,又可以使用if-else,建议使用switch-case。因为效率稍高。
- 细节对比:
if-else语句优势
- if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。
- switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。
switch语句优势
- 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时,只能使用if语句。
- 使用switch可以利用穿透性,同时执行多个分支,而if...else没有穿透性。
案例6、一个整数,判断是正数、负数、还是零。
public static void IfOrSwitchDemo(int num) { if (num > 0) { System.out.println(num + " 是正数"); } else if (num < 0) { System.out.println(num + " 是负数"); } else { System.out.println(num + " 是零"); } }
练习1、编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级:
score>=90 等级: A 70<=score<90 等级: B 60<=score<70 等级: C score<60 等级: D
public static void switchscore(int score) { char grade;//记录学生等级 //if...else if (score >= 90) { grade = 'A'; } else if (score >= 70) { grade = 'B'; } else if (score >= 60) { grade = 'C'; } else { grade = 'D'; } System.out.println("学生成绩为" + score + ",对应的等级为 " + grade); //switch switch (score / 10) { case 9: case 10: grade = 'A'; case 7: case 8: grade = 'B'; case 6: grade = 'C'; default: grade = 'D'; } System.out.println("学生成绩为" + score + ",对应的等级为 " + grade); }
练习2:
编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、rooster、dog、pig。
提示:2022年:虎 2022 % 12 == 6
public static void main(String[] args){ //从键盘输入一个年份 Scanner input = new Scanner(System.in); System.out.print("请输入年份:"); int year = input.nextInt(); input.close(); //判断 switch(year % 12){ case 0: System.out.println(year + "是猴年"); break; case 1: System.out.println(year + "是鸡年"); break; case 2: System.out.println(year + "是狗年"); break; case 3: System.out.println(year + "是猪年"); break; case 4: System.out.println(year + "是鼠年"); break; case 5: System.out.println(year + "是牛年"); break; case 6: System.out.println(year + "是虎年"); break; case 7: System.out.println(year + "是兔年"); break; case 8: System.out.println(year + "是龙年"); break; case 9: System.out.println(year + "是蛇年"); break; case 10: System.out.println(year + "是马年"); break; case 11: System.out.println(year + "是羊年"); break; default: System.out.println(year + "输入错误"); } }
练习3:押宝游戏
随机产生3个1-6的整数,如果三个数相等,那么称为“豹子”,如果三个数之和大于9,称为“大”,如果三个数之和小于等于9,称为“小”,用户从键盘输入押的是“豹子”、“大”、“小”,并判断是否猜对了
提示:随机数 Math.random()产生 [0,1)范围内的小数 如何获取[a,b]范围内的随机整数呢?(int)(Math.random() * (b - a + 1)) + a
public static void yabap() { //生成随机数 int a = (int) (Math.random() * 6 + 1); int b = (int) (Math.random() * 6 + 1); int c = (int) (Math.random() * 6 + 1); //押宝 Scanner scanner = new Scanner(System.in); System.out.println("快压(豹子 大 小)"); String ya = scanner.next().trim(); scanner.close(); //擦拭结果 boolean res = false; switch (ya) { case "豹子": res = a == b && b == c; break; case "大": res = a + b + c > 9; break; case "小": res = a + b + c < 9; break; default: System.out.println("输入有误"); } System.out.println("a,b,c分别是:" + a + "," + b + "," + c); System.out.println(res ? "猜中了" : "猜错了"); }