Java常用类05:Number类 & Random类 & 枚举类

💨——Number类

  • java.text.DecimalFormat — 数字格式化
    public class DecimalFormatTest01 {
        public static void main(String[] args) {
            //java.text.DecimalFormat --- 专门负责数字格式化的
            //DecimalFormat 数字格式化 = new DecimalFormat("数字格式");
            /*
            数字格式有哪些?
                # --- 代表任意数字
                , --- 代表千分位
                . --- 代表小数位
                0 --- 代表小数位不够时补零
             */
            DecimalFormat df = new DecimalFormat("###,###,###.0000");//保留4位小数,不够补0
            String format = df.format(3124445.12);
            System.out.println(format);//3,124,445.1200
        }
    }
    
  • java.math.BigDecimal — 属于大数据,精度极高

    BigDecimal 属于大数据,精度极高—不属于基本数据类型,属于java对象(引用数据类型)

    • 这时SUM公司提供的一个类.专门用于财务软件当中
      注:在财务软件中double是不够用的,所以面试中问到财务数据处理时,千万别说double,得说java.math.BigDecimal
    public class BigDecimalTest01 {
        public static void main(String[] args) {
            //这个100不是普通的100,是精度极高的100
            BigDecimal bd1 = new BigDecimal(100);
            //这个200不是普通的200,是精度极高的200
            BigDecimal bd2 = new BigDecimal(200);
            //求和
            //不能使用基本数据类型方式直接 bd1+bd2 ;bd1和bd2都是引用类型,不能直接使用+求和
            BigDecimal add1 = bd1.add(bd2);//调用方法求和(差,除,乘)
            System.out.println(add1);//300
        }
    }
    

💨——Random类

  • 随机获得一个int取值范围的数字(其他类似,查看帮助文档)
    public class RandomTest01 {
        public static void main(String[] args) {
            Random random = new Random();
            //随机获得一个int取值范围内的数字
            int nextInt = random.nextInt();
            System.out.println(nextInt);
    
            //随机获得一个【0,100】区间的数(取左不取右)
            int nextInt1 = random.nextInt(101);
            System.out.println(nextInt1);
        }
    }
    
  • 案例
    public class RandomTest02 {
        public static void main(String[] args) {
            /*
            编写程序,生成5个不重复的随机数,重复的话重新生成
            最终生成的5个随机数放到数组中,要求数组中的这5个随机数不重复
             */
            Object[] objects = new Object[5];
            Random random = new Random();
            for (int i = 0; i < objects.length; i++) {
                Integer num = random.nextInt(10);
                while (isEqual(objects, num)) {
                    num = random.nextInt(10);
                }
                objects[i] = num;
            }
            System.out.println(Arrays.toString(objects));
        }
        
        public static boolean isEqual(Object[] objects,Integer num) {
            for (int i = 0; i < objects.length; i++) {
                if (num.equals(objects[i])) {
                    return true;
                }
            }
            return false;
        }
    }
    

💨——枚举类

  • 在java中,一个方法如果需要具体的值来代表返回的结果,尽量不要使用int返回值,如果返回结果输入错了,编译器是不会报错的(所有的错误尽可能让编译器找出来,所有的错误越早发现越好!)
    public class EnumTest01 {
        public static void main(String[] args) {
            //System.out.println(10 / 0); //java.lang.ArithmeticException: / by zero
    
            int retValue = divide(10, 2);
            System.out.println(retValue == 1 ? "计算成功" : "计算失败"); // 计算成功
    
            int retValue2 = divide(10, 0);
            System.out.println(retValue2 == 0 ? "计算失败" : "计算成功"); // 计算失败
        }
    
        /**
         * 需求(这是设计者说的!):以下程序,计算两个int类型数据的商,计算成功返回1,计算失败返回0
         * @param a int类型的数据
         * @param b int类型的数据
         * @return 返回1表示成功,返回0表示失败!
         */
        public static int divide(int a, int b){
            try {
                int c = a / b;
                // 程序执行到此处表示以上代码没有发生异常。表示执行成功!
                return 1;
                // 设计缺陷?在这个方法的返回值类型上。返回一个int不恰当。
                // 如果返回值输入错误为:return 10;
                // 返回10已经偏离了需求,实际上已经出错了,但是编译器没有检查出来。
                // 我们一直想追求的是:所有的错误尽可能让编译器找出来,所有的错误越早发现越好!
            } catch (Exception e){
                // 程序执行到此处表示以上程序出现了异常!
                // 表示执行失败!
                return 0;
            }
        } 
    }
    

  • 如果一个方法只需要返回两种情况,建议使用boolean类型返回true和false表示两种情况,
    public class EnumTest01 {
        public static void main(String[] args) {
        	boolean success = divide(10, 0);
            System.out.println(success ? "计算成功" : "计算失败");
        }
        
        /**
    	 * 计算两个int类型数据的商,计算成功返回true,计算失败返回false
    	 * @param a int类型数据
     	* @param b int类型数据
     	* @return 返回值为true表示计算成功,返回值为false表示计算失败
     	*/
        public static boolean divide(int a, int b){
            try {
                int c = a / b;
                return true;
            } catch (Exception e){
                return false;
            }
        }
    

  • 但是在以后的开发中,有可能遇到一个方法的执行结果可能包括三种情况,四种情况,五种情况不等,但是每一个都是可以数清楚的,一枚一枚都是可以列举出来的。这个布尔类型就无法满足需求了。此时需要使用java语言中的枚举类型
    • 枚举是一种引用数据类型
    • 枚举的语法:
      // 枚举编译之后也是生成class文件。
      // 枚举中的每一个值可以看做是常量。
      enum 枚举类型名{
      	枚举值1,枚举值2,枚举值3
      }
      
    • 结果只有两种的建议使用boolean类型
      结果超过两种并且还是可以一枚一枚列举出来的,建议使用枚举类型
    public class EnumTest01 {
        public static void main(String[] args) {
    
            Result result = divide(10, 0);
            System.out.println(result == Result.SUCCESS ? "计算成功" : "计算失败");
        }
    
        /**
         *  计算两个int类型数据的商,计算成功返回true,计算失败返回false
         * @param a int类型数据
         * @param b int类型数据
         * @return Result.SUCCESS表示成功;Result.FAIL表示失败
         */
        private static Result divide(int a, int b) {
            try {
                int c = a / b;
                return Result.SUCCESS;
            } catch (Exception e) {
                return Result.FAIL;
            }
        }
    }
    
    enum Result {
        // SUCCESS 是枚举Result类型中的一个值
        // FAIL 是枚举Result类型中的一个值
        // 枚举中的每一个值,可以看做是“常量”
        SUCCESS, FAIL
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值