推荐switch-case语句使用枚举来判断

推荐switch-case语句使用枚举来判断这是我参与11月更文挑战的第3天,活动详情查看:11月更文挑战 Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.

这是我参与11月更文挑战的第3天,活动详情查看:11月更文挑战

Java中switch-case语句主要用来做条件分支的判断,判断一个变量与一系列的值做相等匹配,每个值都属于一个分支.

1 switch-case简介

语法

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //...
    default : //可选
       //语句
}

说明:

  • 1 switch语句中expression支持的类型为: byte,short,int,char,String,枚举, 但是不支持表达式 如 num>0
  • 2 switch语句可以有多个case语句, 但是每个case后面要有一个比较值和冒号
  • 3 switch语句遇到break会终止语句. 每个case的语句后break为可选, 如果没有break,会造成穿透效果,即执行后续所有的case语句,直到遇到break语句.
  • 4 switch语句中可以添加一个默认分支default. 放置位置没有规定,一般放在最后.当所有分支条件都不满足时,才会走到默认分支,且此分支不需要break语句.

2 switch-case案列

public class switchDemo {
    
    public static void main(String[] args) {

        /** * 运行结果: * 优+ * 你的等级是 A */
        intTest('A');

        /** * 运行结果: * 优 * 良 * 你的等级是 B */
        intTest('B');
    }

    public static void intTest(char grade) {
        switch (grade) {
            case 'A':
                System.out.println("优+");
                break;
            case 'B':
                System.out.println("优");
            case 'C':
                System.out.println("良");
                break;
            case 'D':
                System.out.println("及格");
                break;
            case 'F':
                System.out.println("不及格");
                break;
            default:
                System.out.println("未知等级");
        }
        System.out.println("你的等级是 " + grade);
    }
    
}

从控制台输出的结果可以得知, A等级表示优+. B等级为优, 因为没有break语句,造成穿透,把等级为C的语句也执行了.

使用枚举类作为条件

在使用switch中,通常建议使用枚举来替代字符串等变量的比较, 主要是方便后期维护和新增,使得代码规范性更好.

下列使用枚举方案来替代:

1 新建一个枚举类

public enum ScoreEnum {

    EXCELLENTPLUS('A', "优+"),
    EXCELLENT('B', "优"),
    GOOD('C', "良"),
    PASS('D', "及格"),
    FAIL('E', "不及格"),
    UNKNOWN('N', "未知等级");

    private Character rank;
    private String message;


    public static ScoreEnum getByRank(Character rank) {
        for (ScoreEnum scoreEnum : ScoreEnum.values()) {
            if (scoreEnum.rank.equals(rank)) {
                return scoreEnum;
            }
        }
        return UNKNOWN;
    }


    ScoreEnum(Character rank, String message) {
        this.rank = rank;
        this.message = message;
    }


    public Character getRank() {
        return rank;
    }

    public void setRank(Character rank) {
        this.rank = rank;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2 替换switch比较条件

    public static void intEnumTest(char grade) {

        ScoreEnum scoreEnum = ScoreEnum.getByRank(grade);
        switch (scoreEnum) {
            case EXCELLENTPLUS:
                System.out.println("优+");
                System.out.println(scoreEnum.getMessage());
                break;
            case EXCELLENT:
                System.out.println("优");
                System.out.println(scoreEnum.getMessage());
            case GOOD:
                System.out.println("良");
                System.out.println(scoreEnum.getMessage());
                break;
            case PASS:
                System.out.println("及格");
                System.out.println(scoreEnum.getMessage());
                break;
            case FAIL:
                System.out.println("不及格");
                System.out.println(scoreEnum.getMessage());
                break;
            default:
                System.out.println("未知等级");
                System.out.println(scoreEnum.getMessage());
        }
        System.out.println("你的等级是 " + grade);

    }

3 比较同样的结果

    public static void main(String[] args) {
        
        /** * 运行结果: * 优+ * 优+ * 你的等级是 A * */
        intEnumTest('A');

        /** * 运行结果: * 优 * 优 * 良 * 优 * 你的等级是 B */
        intEnumTest('B');
    }

3 关于switch-case和if-else的比较

1 关于效率.当分支条件多时,switch-case效率较高. 因为在编译时switch-case会生成一个跳转表,来指向实际的case分支地址,跳转表的索引号和switch变量相等的,所以switch-case只需要通过访问对应索引号的项从而达到定位分支. 而if-else结构需要遍历所有的条件分支,直到找到符合条件的.(switch-case像用空间换时间的算法)

2 关于适用范围.switch-case仅在常量选择分支时使用,对于变量表达式,如(num>10 || num<5)等等,不能实现功能,所以相比来说,if-else的使用范围更广,适用的场景更多.

参考资料:

www.runoob.com/java/java-s…

今天的文章推荐switch-case语句使用枚举来判断分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16574.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注