第十四届蓝桥杯集训——JavaC组第十一篇——switch

简介: 第十四届蓝桥杯集训——JavaC组第十一篇——switch

第十四届蓝桥杯集训——JavaC组第十一篇——switch


swtich概述

Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择。以C语言来说,switch(开关语句)常和case break default一起使用。

代码中虽然没有限制if else能够处理的分支数量 ,但当分支过多时,用 if else处理会不太方便 ,所以对于这种情况,实际开发中一般使用switch语句代替 。

switch语法

flag(标示)表示计算结果, 必须是整性, 字符串类型, 或者枚举类型。

switch (flag){

 

case 0 : 语句一; break;

 

case 1: 语句二; break;

 

default: 语句n; break;

 

}

default作用

default在当前switch找不到匹配的case时执行。default并不是必须的。

package com.item.action;
public class Main {
  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");
    }
  }
}

switch基础示例:

package com.item.action;
public class Main {
  public static void main(String[] args) {
    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;
    }
  }
}

输出结果:

由于没有3这个case故而会走到default的路径上。

这是一个很标准的switch的用法,有break,还有default,在什么情况下跳出,在什么情况下结束运行,都很清楚的说明了,但是朋友们在写这个代码的时候,有可能会忘记加入break 或者忘记加入default这样的问题吧。

String类型switch示例

jdk1.7以上才支持·jdk1.7以下需要使用枚举/hashCode

package com.item.action;
public class Main {
  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 );
       }
  }
}

switch枚举判断

这个开发的过程中

package com.item.action;
public class Main {
  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 );
        }
    }
}

巧用break

输出2023年指定月份的最大天数·这里可以替换年份。

package com.item.action;
public class Main {
  public static void main(String args[]) {
    int year = 2023;
    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);
  }
}

石头剪刀布 测试代码:

这里我用的是String当做switch的判断。

package com.item.action;
import java.util.Scanner;
public class Main {
  public static void main(String args[]) {
    int inp = 0; // 定义输入的数值
    String sRnd = ""; // 随机数表示出拳
    int numWin = 0; // 胜场
    int numLost = 0; // 负场
    Scanner sc = new Scanner(System.in);
    while (true) {
      boolean flag = true; // 立个flag备用
      int rnd = (int) (1 + Math.random() * 3);
      System.out.print("请输入【剪刀】、【石头】或【布】,输入【退出】结束游戏:");
      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"); // 其他都是负局情况
      }
      if(numWin==2||numLost==2) {
        break;
      }
    }
    sc.close();
  }
}

三局两胜制度。

 

 

相关文章
|
7月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
115 0
|
7月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
88 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1007 印章
71 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1006 拿金币
72 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1004 无聊的逗
99 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1003 礼物
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1003 礼物
96 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1001 跳马
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1001 跳马
71 0
|
7月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
89 1
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
92 0
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
97 0