【Java学习笔记】

本文介绍了JavaMath类中的各种数学运算方法,如绝对值、向上取整、向下取整、四舍五入等,并通过实例展示了如何使用这些方法。同时提到了质数判断、自幂数概念以及与Runtime类相关的系统资源获取方法。
摘要由CSDN通过智能技术生成

API

记一下类名和类的作用,养成查阅API帮助文档的习惯。

Math

  1. 是一个帮助我们用于进行数学计算的工具类

  2. 私有化构造方法,所有的方法都是静态的

  3. Math类的常用方法

    • public static int abs(int a):获取参数绝对值
    • public static double ceil(double a):向上取整
    • public static double floor(double a):向下取整
    • public static int round(float a):四舍五入
    • public static int max(int a,int b):获取两个int值中的较大值
    • public static double pow(double a,double b):返回a的b次幂的值
    • public static double random():返回值为double的随机值,范围[0.0,1.0)
    public class MathDemo01 {
        public static void main(String[] args) {
    
            /*
                public static int abs(int a):获取参数绝对值
                public static double ceil(double a):向上取整
                public static double floor(double a):向下取整
                public static int round(float a):四舍五入
                public static int max(int a,int b):获取两个int值中的较大值
                public static double pow(double a,double b):返回a的b次幂的值
                public static double sqrt(double a):返回a的平方根
                public static double cbrt(double a):返回a的立方根
                public static double random():返回值为double的随机值,范围[0.0,1.0)
             */
    
            //abs 获取参数的绝对值
            System.out.println(Math.abs(88));//88
            System.out.println(Math.abs(-88));//88
            //bug:
            //以int类型为例  -2147483648 - 2147483647
            //如果没有正数与负数对应,那么传递负数结果有误
            //-2147483648 没有正数与之对应,所以abs结果产生bug
            System.out.println(Math.abs(-2147483648));//-2147483648
            System.out.println(Math.abs(-2147483647));//2147483647
            //System.out.println(Math.absExact(-2147483648));//JDK15以后,抛出异常
    
            //进一法,往数轴的正方向进一
            System.out.println(Math.ceil(12.34));//13.0
            System.out.println(Math.ceil(12.54));//13.0
            System.out.println(Math.ceil(-12.34));//-12.0
            System.out.println(Math.ceil(-12.54));//-12.0
    
            System.out.println("--------------------------");
    
            //去尾法,往数轴的负方向进一
            System.out.println(Math.floor(12.34));//12.0
            System.out.println(Math.floor(12.54));//12.0
            System.out.println(Math.floor(-12.34));//-13.0
            System.out.println(Math.floor(-12.54));//-13.0
    
            System.out.println("--------------------------");
    
            //四舍五入
            System.out.println(Math.round(12.34));//12
            System.out.println(Math.round(12.54));//13
            System.out.println(Math.round(-12.34));//-12
            System.out.println(Math.round(-12.54));//-13
    
            //获取两个整数的较大值
            System.out.println(Math.max(12, 27));//27
            //获取两个整数的较小值
            System.out.println(Math.min(12, 27));//12
    
            //获取a的b次幂
            System.out.println(Math.pow(2, 3));//8.0
            //细节
            //若果第二个参数为0-1之间的小数
            System.out.println(Math.pow(4, 0.5));//2.0
            System.out.println(Math.pow(2, -2));//0.25
            //建议:
            //第二个参数:一般传递大于等于1的正整数
            System.out.println(Math.sqrt(4));//2.0
            System.out.println(Math.cbrt(8));//2.0
    
            System.out.println("--------------------------");
    
            for (int i = 0; i < 10; i++) {
                System.out.println(Math.floor(Math.random()*100)+1);
            }
            //Math.random() [0.0 1.0)
            //*100          [0.0 100.0)
            //floor         去掉了后面的小数
            //+1            [1 100.0]
        }
    }
    

    练习:

    判断一个数是否为一个质数

    public class MathDemo02 {
        public static void main(String[] args) {
            //判断一个数是否为一个质数
            System.out.println(isPrime(997));
    
            //997 2-996 995次
            //30次
        }
    
        public static boolean isPrime(int number) {
            int count = 0;
            for (int i = 2; i <= Math.sqrt(number); i++) {
                count++;
                if(number % i == 0) {
                    return false;
                }
            }
            System.out.println(count);
            return true;
        }
    }
    

    自幂数,一个n位自然数等于自身各个数位上数字的n次幂之和

    举例1:三位数 13+53+3^3=153

    举例2:四位数 14+64+34+44=1634

    如果自幂数是

    • 一位数,也叫做独身数;

    • 三位自幂数称为水仙花数;

    • 四位自幂数称为四叶玫瑰数;

    • 五位自幂数称为五角星数;

    • 六位自幂数称为六合数;

    • 七位自幂数称为北斗七星数;

    • 八位自幂数称为八仙数;

    • 九位自幂数称为九九重阳数;

    • 十位自幂数称为十全十美数。

    要求1:统计一共有多少个水仙花数

    要求2:证明没有两位的自幂数

    要求3:分别统计有多少个四叶玫瑰数和五角星数(都是3个)

    public class MathDemo03 {
        public static void main(String[] args) {
            //要求1:统计一共有多少个水仙花数
            System.out.println("--------------------");
            //水仙花数:100-999
    
            //得到每一个三位数
            int count = 0;
            for (int i = 100; i <= 999; i++) {
                //个位    十位  百位
                int one = i % 10;
                int ten = i / 10 % 10;
                int hundred = i / 100;
    
                //判断:
                //每一位的三次方之和跟本身进行比较
                double sum = Math.pow(one,3) + Math.pow(ten,3) +Math.pow(hundred,3);
                if(sum == i) {
                    count++;
                    System.out.println(i);
                }
            }
            System.out.println(count);
    
            //要求2:证明没有两位的自幂数
            System.out.println("--------------------");
            if(getResult()) {
                System.out.println("存在两位的自幂数");
            }else {
                System.out.println("不存在两位的自幂数");
            }
    
            //要求3:分别统计有多少个四叶玫瑰数和五角星数(都是3个)
            System.out.println("--------------------");
            int num1 = 4;
            int num2 = 5;
            System.out.println("有"+getNumber(num1)+"个四叶玫瑰数");
            System.out.println("有"+getNumber(num2)+"个五角星数");
        }
        //证明没有两位的自幂数
        public static boolean getResult() {
            for (int i = 10; i <= 99; i++) {
                int one = i % 10;
                int ten = i / 10;
    
                double sum = Math.pow(one,2) + Math.pow(ten,2);
                if(sum == i) {
                    return true;
                }
            }
            return false;
        }
        public static int getNumber(int num) {
            int count = 0;
            //创建位数数组,如要求四位数的自幂数个数,数组长度为4
            //......千  百  十  个
            for (int j = (int)Math.pow(10,num-1); j <= (int)Math.pow(10,num)-1; j++) {
                int[] arr = new int[num];
                for (int i = num-1; i >= 0; i--) {
                    arr[i] = (j / (int)Math.pow(10,num-i-1)) % 10;
                }
                double sum = 0;
                for (int i = 0; i < num; i++) {
                    sum += Math.pow(arr[i],num);
                }
                if(sum == j) {
                    count++;
                }
            }
            return count;
        }
    }
    

System

System也是一个工具类,提供了一些与系统相关的方法

  • public static void exit(int status):终止当前运行的Java虚拟机

  • public static long currentTimeMillis():返回当前系统的时间毫秒值形式

    计算机中的时间原点:1970年1月1日 00:00:00(08:00:00)

    原因:1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统。他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。(故1970年1月1日算C语言的生日)

    1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒

  • public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数):数组拷贝

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

        /*
            public static void exit(int status):终止当前运行的Java虚拟机
            public static long currentTimeMillis():返回当前系统的时间毫秒值形式
            public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数):数组拷贝
         */

        //方法的形参
        //状态码:
        //0:表示当前虚拟机是正常停止
        //非0:表示当前虚拟机异常停止
//        System.exit(0);
//        System.out.println("看看我执行了吗");//未执行
        //当我们需要将整个程序都结束的时候,就可以调用这个方法

        long l = System.currentTimeMillis();
        System.out.println(l);

        //拷贝数组
        int[] arr1 = {1,2,3,4,5,6,7,8,9,10};
        int[] arr2 = new int[10];
        //把arr1数组中的数据拷贝到arr2中
        //参数一:数据源,要拷贝的数据从哪个数组而来
        //参数二:从数据源数组中的第几个索引开始拷贝
        //参数三:目的地,要把数据拷贝到哪个数组中
        //参数四:目的地数组的索引
        //参数五:拷贝的个数
        System.arraycopy(arr1,0,arr2,4,3);

        //验证
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]+" ");
        }

        //细节:
        //1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
        //2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
        //3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型
    }
}

Runtime

Runtime表示当前虚拟机的运行环境

  • public static Runtime getRuntime():当前系统的运行环境对象
  • public void exit(int status):停止虚拟机
  • public int availableProcessors():获得CPU的线程数
  • public long maxMemory():JVM能从系统中获取总内存大小(单位byte)
  • public long totalMemory():JVM已经从系统中获取总内存大小(单位byte)
  • public long freeMemory():JVM剩余内存大小(单位byte)
  • public Process exec(String command):运行cmd命令
public class RuntimeDemo01 {
    public static void main(String[] args) throws IOException {
        /*
            public static Runtime getRuntime():当前系统的运行环境对象
            public void exit(int status):停止虚拟机
            public int availableProcessors():获得CPU的线程数
            public long maxMemory():JVM能从系统中获取总内存大小(单位byte)
            public long totalMemory():JVM已经从系统中获取总内存大小(单位byte)
            public long freeMemory():JVM剩余内存大小(单位byte)
            public Process exec(String command):运行cmd命令
         */

        //1.获取Runtime的对象
        Runtime r1 = Runtime.getRuntime();
        Runtime r2 = Runtime.getRuntime();

        System.out.println(r1 == r2);//true

        //2.exit    停止虚拟机
        //Runtime.getRuntime().exit(0);
        //System.out.println("看看我执行了吗");//未执行

        //3.获得CPU的线程数
        System.out.println(Runtime.getRuntime().availableProcessors());//8

        //4.总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);//3603

        //5.已经获取的总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().totalMemory()/1024/1024);//243

        //6.剩余内存大小
        System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);//238

        //7.运行cmd命令
        //shutdown:关机
        //加上参数才能执行
        //-s:默认在1分钟之后关机
        //-s -t 指定时间:指定关机时间
        //-a:取消关机操作
        //-r:关机并重启
        Runtime.getRuntime().exec("shutdown -a");
    }
}

BigInteger和BigDecimal

正则表达式

说明:

以上笔记学习是学习b站黑马程序员时记下的笔记,仅限于帮助理解学习,不做任何其他商业用途。

黑马程序员

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值