• 枚举


    没有使用枚举的案例:

    package com.javaSe.Enum;
    /*
    这个案例没有使用java中的枚举,在设计方面有什么缺陷?
        以下代码可以编译,也可以运行。没有问题。
        就是设计上你觉得有什么缺陷?
    */
    public class EnumTest {
        public static void main(String[] args) {
            // System.out.println(10 / 0); // java.lang.ArithmeticException: / by zero 异常:除数为0
            /*int retValue = divide(10,2);
            System.out.println(retValue);// 0
        
            int retValue2 = divide(10,0);
            System.out.println(retValue2);// 1*/
            boolean success = divide(10,2);
            System.out.println(success ? "计算成功" : "计算失败");
            
        }
        
        /**
         * 以下程序,计算两个int类型数据的商,计算成功返回1,否则返回0
         * @param a int类型的数据
         * @param b int类型的数据
         * @return 返回1表示成功,返回0表示失败
         */
        
        /*
        设计缺陷:在这个方法的返回值类型上,返回一个int不恰当。
        既然最后的结果只是成功和失败,最好使用boolean类型。
        因为true和false正好可以表示两种不同的状态。
         */
        /*public static int divide(int a,int b){
            try {
                int c = a / b;
                // 程序执行到此处表示以上代码没有异常。表示执行成功。
                // 返回10已经偏离了需求,实际上已经出错了,但是编译器没有检测出来。
                // 我们一直想追求的是:所有的错误尽可能让编译器找出来,所有的错误越早发现越好。
                return 1;
            }catch (Exception e){
                // 执行到这里,表示程序出现了异常,执行失败。
                return 0;
            }
        }*/
        
        // 这种设计不错
        public static boolean divide(int a,int b){
            try {
                // 程序执行到此处表示以上代码没有异常。表示执行成功。
                int c = a / b;
                return true;
            }catch (Exception e){
                // 执行到这里,表示程序出现了异常,执行失败。
                return false;
            }
        }
        
        /*
        思考:以上的这个方法设计没毛病,挺好,返回true和false表示两种情况,
        但是在以后的开发中,有可能遇到一个方法的执行结果可能包括三种情况,四种情况,五种情况不等,但是每一个都是可以数清楚的, 一枚一枚都是可以列举出来的。
        这个布尔类型就无法满足需求了。此时需要使用java语言中的枚举类型。
         */
    }

    枚举的案例以及创建枚举:

    package com.javaSe.Enum;
    
    
    /*
    采用枚举的方式改造程序
    总结:
        1 枚举是一种引用类型数据
        2 枚举类型怎么定义,语法是:
            enum 枚举类型名{
                枚举值1,枚举值2
            }
        3 结果只有两种情况的,建议使用boolean类型。
        结果超过两种还是可以一枚一枚列举出来的,建议使用枚举类型。
            例如:颜色、四季、星期等都可以使用枚举类型。
    */
    public class EnumTest01 {
        public static void main(String[] args) {
            Result r = divide(10,0);
            System.out.println(r == Result.SUCCESS ? "0" : "1");
        }
        
        /**
         * 计算两个int类型数据的商
         * @param a int
         * @param b int
         * @return SUCCESS表示成功   FAIL表示失败
         */
        public static Result divide(int a,int b){
            try {
                int c = a / b;
                return Result.SUCCESS;
            }catch (Exception e){
                return Result.FAIL;
            }
        }
    }
    
    
    // 枚举:一枚一枚可以列举出来的,才建议使用枚举类型
    // 枚举编译之后也是生成class文件。
    // 枚举也是一种引用数据类型。
    // 枚举中的每一个值可以看做是常量
    enum Result{
        // SUCCESS 是枚举Result类型中的一个值。
        // FAIL 是枚举Result类型中的一个值。
        // 枚举中每一个值,可以看做是"常量"
        SUCCESS,FAIL
    }
     
    创建颜色枚举:
    package com.javaSe.Enum;
    /*颜色枚举类型*/
    public enum Color {    
        /*    颜色值:红 蓝 黄  黑     */    
        RED,BLUE,YELLOW,BLACK
    }
     
    创建四季枚举:
    package com.javaSe.Enum;
    
    
    /**
    * 四季枚举
    */
    public enum Season {
        // 春夏秋冬
        SPRING,SUMMER,AUTUNM,WINTER
    }

    switch支持枚举案例:

    package com.javaSe.Enum;
    
    
    public class SwitchTest {
        public static void main(String[] args) {
            // switch支持枚举类型。
            /*
            switch也支持String,int,枚举
            低版本不支持String 枚举,只支持int
             */
            switch (Season.SUMMER){
                case SPRING:
                    System.out.println("春天");
                    break;
                case SUMMER:
                    System.out.println("夏天");
                    break;
                case AUTUNM:
                    System.out.println("秋天");
                    break;
                case WINTER:
                    System.out.println("冬天");
                    break;
            }
        }
    }
  • 相关阅读:
    luogu P1144 最短路计数
    codevs 1006 等差数列
    luogu P2419 [USACO08JAN]牛大赛Cow Contest
    luogu cogs 选数
    luogu P1186玛丽卡
    leetcode[69]Sqrt(x)
    leetcode[70]Climbing Stairs
    leetcode[71]Simplify Path
    leetcode[72]Edit Distance
    leetcode[73]Set Matrix Zeroes
  • 原文地址:https://www.cnblogs.com/xlwu/p/13257878.html
Copyright © 2020-2023  润新知