switch语句三种用法
使用switch这个关键词, 我们可以很好的解决if…else 中多重选择的尴尬场面!
switch 标准方式
flag(标示)表示计算结果, 必须是整性, 字符串类型, 或者枚举类型。
switch (flag){undefined case 0 : 语句一; break; case 1: 语句二; break; default: 语句n; break; }
标准demo·数字判断
int flag = 3; switch (flag){ case 0: System.out.println("The number is 0" ); break; case 1: System.out.println("The number is 1" ); break; case 2: System.out.println("The number is 2" ); break; default: System.out.println("no have choose" ); break; }
这是一个很标准的 switch 的用法, 有break, 还有 default ,在什么情况下跳出, 在什么情况下结束运行, 都很清楚的说明了, 但是朋友们在写这个代码的时候, 有可能会忘记加入break 或者 忘记 加入 default 这样的问题吧。
String类型switch示例·jdk1.7以上才支持·jdk1.7以下需要使用枚举/hashCode
package Action; public class HelloWorld { public static void main(String args[]) { String str = "C" ; switch (str) { 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( 0 ); } } }
枚举判断
package Action; public class HelloWorld { static enum E { A, B, C, D } public static void main(String args[]) { E e = E.B; switch (e) { 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 ; default : System.out.println( 0 ); } } }
使用【hashCode】
可以看到hashCode与char是相同的,那么进行数字判断或者其它字符串判断都是一样的,支持硬件更换。
package Action; public class HelloWorld { public static void main(String args[]) { String x = "2"; System.out.println("hashCode:"+x.hashCode()); System.out.println("char:"+(int) '2'); int x_int = x.hashCode(); switch (x_int) { case 50: System.out.println(2); break; case 51: System.out.println(3); break; default: System.out.println("default"); break; } } }
巧用break
输出2022年指定月份的最大天数·这里可以替换年份
package Action; public class HelloWorld { public static void main(String args[]) { int year = 2022 ; int month = 2 ; int day = 0 ; switch (month) { case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : day = 31 ; break ; case 2 : boolean b=(year%4==0&&year%100!=0)||year%400==0; day = b?29:28 ; break ; case 4 : case 6 : case 9 : case 11 : day = 30 ; break ; } System.out.println(day); } }
default作用
default在当前switch找不到匹配的case时执行。default并不是必须的。
package Action; public class HelloWorld { public static void main(String args[]) { int x = 0 ; switch (x) { case 1 : System.out.println( 1 ); case 2 : System.out.println( 2 ); default : System.out.println( "default" ); } } }
以下为JAVA_14的语法
switch - > 用法:
使用 - > 方法更加简单, 就不用使用 break 命令, 保证只有一种路径会被执行!
用法如下:
int flag = 3; switch (flag){ case 0 -> System.out.println("The number is 0" ); case 1 -> System.out.println("The number is 1" ); case 2 -> System.out.println("The number is 2" ); default -> System.out.println("no have choose" ); }
去掉了 break 和 冒号 取代的使用 箭头 ->
switch yield 用法:
看到 yield 的时候, 我就在想, 这一定要传值回来的函数。 用法 也很简单,
但是需要注意一点, 传值回去, 外部一定要定义个参数 用来接受这个值。
int flag = 2; String ss; ss = switch (flag){ case 0 -> "The number is 0" ; case 1 -> "The number is 1" ; case 2 -> { String c = "The number is 2"; yield c; } default -> "no have choose"; }; System.out.println(ss);
这里来说, switch 作为了 一条语句, 所以末尾要加冒号, 其他用法相同, 下次如果条件很多的话, 就不用使用 if else ,可以考虑使用 switch 中的yield 返回参数方式了!
石头剪刀布 测试代码:
学了switch的这些用法, 我想应该写个程序来试试吧, 所以就写了个石头剪刀布的小游戏
package Action; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { ; int inp=0; //定义输入的数值 String sRnd=""; //随机数表示出拳 int numWin=0; //胜场 int numLost=0; //负场 while (true) { boolean flag=true; //立个flag备用 int rnd = (int) (1 + Math.random() * 3); System.out.print("请输入【剪刀】、【石头】或【布】,输入【退出】结束游戏:"); @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); String sInp = sc.next(); switch (sInp) {//输入文字转数字 case "剪刀": inp = 1; break; case "石头": inp = 2; break; case "布": inp = 3; break; case "退出": System.out.println("您已退出!\n "); return; default: System.out.println("输入有误! \n");//输入错误时flag为假 flag=false; break; } switch (rnd) {//随机数转换成出拳 case 1: sRnd = "剪刀"; break; case 2: sRnd = "石头"; break; case 3: sRnd = "布"; break; default: break; } if (flag==false){//前面立的flag为假了,跳过这次循环 continue; } else if (inp == rnd) { System.out.println("平局! 电脑也是"+sRnd+" 胜"+numWin+"负"+numLost+"\n"); } else if (inp == 1 && rnd == 3 || inp == 2 && rnd == 1 || inp == 3 && rnd == 2) { //列出所有胜局情况 System.out.println("你赢了!电脑是"+sRnd+" 胜"+ ++numWin+"负"+numLost+"\n"); } else { System.out.println("电脑胜!电脑是 "+sRnd+" 胜"+numWin+"负"+ ++numLost+"\n"); //其他都是负局情况 } } } }
希望能对大家有所帮助,欢迎一键三连。