Java基础十:枚举

目录

1.大数值运算类

1.1BigInteger -整数的大数值运算类

1.2BigDecimal - 小数的大数值运算类

2.枚举引入案例

3.枚举案例

4.枚举案例 -- 状态机

5.枚举案例 -- 错误码

6.枚举案例 -- 组织枚举

7.枚举案例 -- 策略枚举


1.大数值运算类

1.1BigInteger -整数的大数值运算类

package com.qf.big;
​
import java.math.BigInteger;
​
public class Test01 {
    /**
     * 知识点:BigInteger - 整数的大数值运算类
     */
    public static void main(String[] args) {
        
        BigInteger big1 = new BigInteger("12345678901234567890");
        BigInteger big2 = new BigInteger("12345678901234567890");
        
        BigInteger add = big1.add(big2);
        System.out.println("加法:" + add);
        
        BigInteger subtract = big1.subtract(big2);
        System.out.println("减法:" + subtract);
        
        BigInteger multiply = big1.multiply(big2);
        System.out.println("乘法:" + multiply);
        
        BigInteger divide = big1.divide(big2);
        System.out.println("除法:" + divide);
    }
}
​

1.2BigDecimal - 小数的大数值运算类

package com.qf.big;
​
import java.math.BigDecimal;
​
public class Test02 {
    /**
     * 知识点:BigDecimal - 小数的大数值运算类
     */
    public static void main(String[] args) {
        
        BigDecimal big1 = new BigDecimal("0.5");
        BigDecimal big2 = new BigDecimal("0.4");
    
        BigDecimal add = big1.add(big2);
        System.out.println("加法:" + add);
        
        BigDecimal subtract = big1.subtract(big2);
        System.out.println("减法:" + subtract);
        
        BigDecimal multiply = big1.multiply(big2);
        System.out.println("乘法:" + multiply);
        
        BigDecimal divide = big1.divide(big2);
        System.out.println("除法:" + divide);
    
    }
}
​
package com.qf.big;
​
import java.math.BigDecimal;
​
public class Test03 {
    /**
     * 知识点:BigDecimal - 小数的大数值运算类
     */
    public static void main(String[] args) {
        
        BigDecimal big1 = new BigDecimal("10");
        BigDecimal big2 = new BigDecimal("3");
    
        BigDecimal divide = big1.divide(big2, 2, BigDecimal.ROUND_HALF_UP);
        System.out.println("除法:" + divide);
    
    }
}

2.枚举引入案例

package com.qf.enum_01;
​
public class Test01{
    /**
     * 知识点:枚举引入案例
     * 
     * 需求:编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter)
     * 步骤:
     *      1.私有化Season的构造方法 -- 目的:让外界不能创建对象
     *      2.在类中创建四个对象(spring,summer,autumn,winter)
     *      3.使用public修饰 -- 目的:扩大访问权限
     *      4.使用static修饰 -- 目的:通过类名调用
     *      5.使用final修饰 --- 目的:外界不能改动对象
     * 
     * 枚举的应用场景:一个类只能有固定的几个对象,就使用枚举代替
     */
    public static void main(String[] args) {
        
        System.out.println(Season.spring);
        System.out.println(Season.summer);
        System.out.println(Season.autumn);
        System.out.println(Season.winter);
        
    }
}
​
package com.qf.enum_01;
​
public class Season {
    
    public static final Season spring = new Season("春天", "万物复苏");
    public static final Season summer = new Season("夏天", "汗如雨下");
    public static final Season autumn = new Season("秋天", "秋高气爽");
    public static final Season winter = new Season("冬天", "银装素裹");
​
    private String name;
    private String info;
    
    private Season() {
    }
​
    private Season(String name, String info) {
        this.name = name;
        this.info = info;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getInfo() {
        return info;
    }
​
    public void setInfo(String info) {
        this.info = info;
    }
​
    @Override
    public String toString() {
        return "Season [name=" + name + ", info=" + info + "]";
    }
}
​

3.枚举案例

package com.qf.enum_02;
​
public class Test01 {
    /**
     * 知识点:枚举案例
     * 
     * 需求:编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter)
     * 注意:使用枚举解决该需求
     */
    public static void main(String[] args) {
        
        System.out.println(Season.spring);
        System.out.println(Season.summer);
        System.out.println(Season.autumn);
        System.out.println(Season.winter);
        
    }
}
​
package com.qf.enum_02;
​
public class Test02 {
    /**
     * 知识点:枚举的常用方法
     */
    public static void main(String[] args) {
        
        //通过对象名获取到指定枚举类中的对象
        Season season1 = Enum.valueOf(Season.class, "spring");
        System.out.println(season1);
        
        //通过对象名获取到指定枚举类中的对象
        Season season2 = Season.valueOf("spring");
        System.out.println(season2);
        
        //获取枚举类中所有的对象,返回对象数组
        Season[] values = Season.values();
        for (Season season : values) {
            System.out.println(season);
        }
    }
}
​
package com.qf.enum_02;
​
public class Test03 {
    /**
     * 扩展:switch如何处理枚举
     */
    public static void main(String[] args) {
​
        switch (Season.spring) {
        case spring:
            System.out.println("春天");
            break;
        case summer:
            System.out.println("夏天");
            break;
        case autumn:
            System.out.println("秋天");
            break;
        case winter:
            System.out.println("冬天");
            break;
        }
​
​
    }
}
​
package com.qf.enum_02;
​
public class Test04 {
    /**
     * 扩展:switch如何处理字符串
     */
    public static void main(String[] args) {
        
        
        switch ("C#") {
        case "BB":
            System.out.println("BB");
            break;
        case "Aa":
            System.out.println("Aa");
            break;
        case "CC":
            System.out.println("CC");
            break;
        }
    }
}
package com.qf.enum_02;
​
//隐性继承于Enum类
public enum Season{
    
    //public static final Season spring = new Season("春天","春雨绵绵");
    spring("春天","春雨绵绵"),
    summer("夏天","烈日炎炎"),
    autumn("秋天","硕果累累"),
    winter("冬天","白雪皑皑");
​
    private String name;
    private String info;
    
    private Season() {
    }
​
    private Season(String name, String info) {
        this.name = name;
        this.info = info;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getInfo() {
        return info;
    }
​
    public void setInfo(String info) {
        this.info = info;
    }
​
    @Override
    public String toString() {
        return this.name + " -- " + this.info;
    }
}
package com.qf.enum_02;
​
public enum Color {
​
    //枚举里没有定义属性、方法,可以在最后一个对象后面加逗号、分号或什么都不加
    
    RED,GREEN,BLUE;
}
​

4.枚举案例 -- 状态机

package com.qf.enum_03;
​
import java.util.Scanner;
​
public class Test01 {
    /**
     * 知识点:枚举案例 -- 状态机
     */
    public static void main(String[] args) {
​
        Scanner scan = new Scanner(System.in);
​
        System.out.println("请选择信号灯:RED,YELLOW,GREEN");
        String str = scan.next();
        Signal signal = Signal.valueOf(str);
​
        String trafficInstruct = getTrafficInstruct(signal);
        System.out.println(trafficInstruct);
​
        scan.close();
    }
​
    public static String getTrafficInstruct(Signal signal){
​
        String instruct = "信号灯故障";
​
        switch (signal) {
        case RED:
            instruct = "红灯停";
            break;
        case YELLOW:
            instruct = "黄灯请注意";
            break;
        case GREEN:
            instruct = "绿灯行";
            break;
        }
        return instruct;
    }
}
​
package com.qf.enum_03;
​
//信号灯的枚举
public enum Signal {
    RED,YELLOW,GREEN;
}
​

5.枚举案例 -- 错误码

package com.qf.enum_04;
​
public class Test01 {
    /**
     * 知识点:枚举案例 -- 错误码
     */
    public static void main(String[] args) {
        
        System.out.println(AddCode.ERR_1);
        System.out.println(AddCode.ERR_2);
        System.out.println(AddCode.OK);
        
        
    }
}
​
package com.qf.enum_04;
​
public enum AddCode {
    
    ERR_1(-1,"添加失败-学生信息不合法"),
    ERR_2(-2,"添加失败-有重复学生"),
    OK(1,"添加成功");
    
    private int code;
    private String message;
    
    private AddCode() {
    }
    
    private AddCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
​
    public int getCode() {
        return code;
    }
​
    public void setCode(int code) {
        this.code = code;
    }
​
    public String getMessage() {
        return message;
    }
​
    public void setMessage(String message) {
        this.message = message;
    }
    
    @Override
    public String toString() {
        return message;
    }
}
​

6.枚举案例 -- 组织枚举

package com.qf.enum_05;
​
public class Test01 {
    /**
     * 知识点:枚举案例 -- 组织枚举
     * 
     * 经验:项目中会把相同的枚举使用类或接口组织起来,一般使用接口组织
     *      使用类组织枚举,枚举自动加上static
     *      使用接口组织枚举,枚举自动加上public static
     */
    public static void main(String[] args) {
        
        System.out.println(Code.AddCode.ERR_1);
        
        
    }
}
​
package com.qf.enum_05;
​
public class Code {
​
    enum AddCode {
        
        ERR_1(-1,"添加失败-学生信息不合法"),
        ERR_2(-2,"添加失败-有重复学生"),
        OK(1,"添加成功");
        
        private int code;
        private String message;
        
        private AddCode() {
        }
        
        private AddCode(int code, String message) {
            this.code = code;
            this.message = message;
        }
​
        public int getCode() {
            return code;
        }
​
        public void setCode(int code) {
            this.code = code;
        }
​
        public String getMessage() {
            return message;
        }
​
        public void setMessage(String message) {
            this.message = message;
        }
        
        @Override
        public String toString() {
            return message;
        }
    }
​
    enum DeleteCode {
        
        ERR_1(-1,"删除失败-学生信息不合法"),
        ERR_2(-2,"删除失败-没有该学生"),
        OK(1,"删除成功");
        
        private int code;
        private String message;
        
        private DeleteCode() {
        }
        
        private DeleteCode(int code, String message) {
            this.code = code;
            this.message = message;
        }
​
        public int getCode() {
            return code;
        }
​
        public void setCode(int code) {
            this.code = code;
        }
​
        public String getMessage() {
            return message;
        }
​
        public void setMessage(String message) {
            this.message = message;
        }
        
        @Override
        public String toString() {
            return message;
        }
    }
​
    enum UpdateCode {
        
        ERR_1(-1,"修改失败-学生信息不合法"),
        ERR_2(-2,"修改失败-没有该学生"),
        ERR_3(-3,"修改失败 -- 修改类型异常"),
        ERR_4(-4,"修改失败 -- 修改数据不合法"),
        ERR_5(-5,"修改失败 -- 目标班级上已有学生"),
        ERR_6(-6,"修改失败 -- 目标学号上已有学生"),
        OK(1,"修改成功");
        
        private int code;
        private String message;
        
        private UpdateCode() {
        }
        
        private UpdateCode(int code, String message) {
            this.code = code;
            this.message = message;
        }
​
        public int getCode() {
            return code;
        }
​
        public void setCode(int code) {
            this.code = code;
        }
​
        public String getMessage() {
            return message;
        }
​
        public void setMessage(String message) {
            this.message = message;
        }
        
        @Override
        public String toString() {
            return message;
        }
    }
}
​

7.枚举案例 -- 策略枚举

package com.qf.enum_06;
​
public class Test01 {
    /**
     * 知识点:枚举案例 -- 策略枚举
     * 
     * 需求:制作计算工资的功能
     * 分析:
     *      员工分类:行政人员、讲师、招生
     *      部门:
     *          总经办(行政人员)、品质保障部(行政人员)、就业老师(行政人员)
     *          Java(讲师)、Python(讲师)、HTML(讲师)
     *          院校(招生)、网咨(招生)、职发(招生)
     */
    public static void main(String[] args) {
        
        double salary1 = Salary.generalManagerOffice.getSalary(20000, 0, 0, 20000, 0);
        System.out.println("计算校长的工资:" + salary1);
        
        double salary2 = Salary.qualityAssurance.getSalary(10000, 0, 0, 8000, 0);
        System.out.println("计算班主任的工资:" + salary2);
        
        double salary3 = Salary.academy.getSalary(6000, 0, 0, 4000, 4000);
        System.out.println("计算院校招生老师的工资:" + salary3);
        
        double salary4 = Salary.java.getSalary(1200, 88, 10, 200, 0);
        System.out.println("计算Java讲师的工资:" + salary4);
        
    }
}
​
package com.qf.enum_06;
​
import java.math.BigDecimal;
​
//获取部门工资的枚举
public enum Salary {
    java(StaffType.teacher),python(StaffType.teacher),HTML(StaffType.teacher),
    generalManagerOffice(StaffType.administration),qualityAssurance(StaffType.administration),obtainEmployment(StaffType.administration),
    academy(StaffType.recruitStudents),onlineConsultation(StaffType.recruitStudents),jobDevelopment(StaffType.recruitStudents);
    
    private StaffType staffType;
    
    private Salary(StaffType staffType) {
        this.staffType = staffType;
    }
​
    /**
     * 获取工资
     * @param baseSalary 基本工资
     * @param classHour 课时
     * @param teachingHourSubsidy 课时费
     * @param achievements 绩效
     * @param recruitStudentsAchievements 招生绩效
     * @return 工资
     */
    public double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements,double recruitStudentsAchievements){
        return staffType.calculateSalary(baseSalary, classHour, teachingHourSubsidy, achievements, recruitStudentsAchievements);
    }
    
    //员工类别的枚举
    private enum StaffType{
        
        //底层创建了一个匿名类(Salary$StaffType$1),继承StaffType
        //创建的是匿名类(Salary$StaffType$1)的对象 -- administration
        administration {
            @Override
            public double calculateSalary(double baseSalary, int classHour, double teachingHourSubsidy,
                    double achievements, double recruitStudentsAchievements) {
                BigDecimal big1 = new BigDecimal(String.valueOf(baseSalary));
                BigDecimal big2 = new BigDecimal(String.valueOf(achievements));
                BigDecimal result = big1.add(big2);
                return result.doubleValue();
            }
        },
        teacher {
            @Override
            public double calculateSalary(double baseSalary, int classHour, double teachingHourSubsidy,
                    double achievements, double recruitStudentsAchievements) {
                BigDecimal big1 = new BigDecimal(String.valueOf(baseSalary));
                BigDecimal big2 = new BigDecimal(String.valueOf(achievements));
                BigDecimal big3 = new BigDecimal(String.valueOf(classHour));
                BigDecimal big4 = new BigDecimal(String.valueOf(teachingHourSubsidy));
                BigDecimal result = big3.multiply(big4).add(big1).add(big2);
                return result.doubleValue();
            }
        },
        recruitStudents {
            @Override
            public double calculateSalary(double baseSalary, int classHour, double teachingHourSubsidy,
                    double achievements, double recruitStudentsAchievements) {
                BigDecimal big1 = new BigDecimal(String.valueOf(baseSalary));
                BigDecimal big2 = new BigDecimal(String.valueOf(achievements));
                BigDecimal big3 = new BigDecimal(String.valueOf(recruitStudentsAchievements));
                BigDecimal result = big1.add(big2).add(big3);
                return result.doubleValue();
            }
        }
        
        ;
        
        public abstract double calculateSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements,double recruitStudentsAchievements);
    }
}
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值