JavaSE——常用类-Math类和Random类

Math类

包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

【常用值与函数】
Math.PI 记录的圆周率
Math.E 记录e的常量
Math中还有一些类似的常量,都是一些工程数学常用量。
Math.abs 求绝对值
Math.sin 正弦函数 Math.asin 反正弦函数
Math.cos 余弦函数 Math.acos 反余弦函数
Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数
Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度
Math.ceil 得到不小于某数的最大整数
Math.floor 得到不大于某数的最大整数
Math.IEEEremainder 求余
Math.max 求两数中最大
Math.min 求两数中最小
Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常

Math.exp 求e的任意次方
Math.log10 以10为底的对数
Math.log 自然对数
Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)
Math.round 同上,返回int型或者long型(上一个函数返回double型)
Math.random 返回0,1之间的一个随机数

package com.kuang.oop;

public class Test {
    public static void main(String[] args) {
        /**
         * Math.sqrt()//计算平方根
         * Math.cbrt()//计算立方根
         * Math.pow(a, b)//计算a的b次方
         * Math.max( , );//计算最大值
         * Math.min( , );//计算最小值
         */
        System.out.println(Math.sqrt(16)); // 4.0
        System.out.println(Math.cbrt(8)); // 2.0
        System.out.println(Math.pow(3, 2)); // 9.0
        System.out.println(Math.max(2.3, 4.5));// 4.5
        System.out.println(Math.min(2.3, 4.5));// 2.3
        /**
         * abs求绝对值
         */
        System.out.println(Math.abs(-10.4)); // 10.4
        System.out.println(Math.abs(10.1)); // 10.1
        /**
         * ceil天花板的意思,就是返回大的值(向上取整)
         */
        System.out.println(Math.ceil(-10.1)); // -10.0
        System.out.println(Math.ceil(10.7)); // 11.0
        System.out.println(Math.ceil(-0.7)); // -0.0
        System.out.println(Math.ceil(0.0)); // 0.0
        System.out.println(Math.ceil(-0.0)); // -0.0
        System.out.println(Math.ceil(-1.7)); // -1.0
        /**
         * floor地板的意思,就是返回小的值(向下取整)
         */
        System.out.println(Math.floor(-10.1)); // -11.0
        System.out.println(Math.floor(10.7)); // 10.0
        System.out.println(Math.floor(-0.7)); // -1.0
        System.out.println(Math.floor(0.0)); // 0.0
        System.out.println(Math.floor(-0.0)); // -0.0
        /**
         * random 取得一个大于或者等于0.0小于不等于1.0的随机数 [0,1)
         */
        System.out.println(Math.random()); // 小于1大于0的double类型的数
        System.out.println(Math.random() + 1);// 大于1小于2的double类型的数
        /**
         * rint 四舍五入,返回double值
         * 注意.5的时候会取偶数 异常的尴尬=。=
         */
        System.out.println(Math.rint(10.1)); // 10.0
        System.out.println(Math.rint(10.7)); // 11.0
        System.out.println(Math.rint(11.5)); // 12.0
        System.out.println(Math.rint(10.5)); // 10.0,这里没有.5进位,选择取偶数
        System.out.println(Math.rint(10.51)); // 11.0
        System.out.println(Math.rint(-10.5)); // -10.0,这里没有.5进位,选择取偶数
        System.out.println(Math.rint(-11.5)); // -12.0
        System.out.println(Math.rint(-10.51)); // -11.0
        System.out.println(Math.rint(-10.6)); // -11.0
        System.out.println(Math.rint(-10.2)); // -10.0
        /**
         * round 四舍五入,float时返回int值,double时返回long值
         */
        System.out.println(Math.round(10.1)); // 10
        System.out.println(Math.round(10.7)); // 11
        System.out.println(Math.round(10.5)); // 11
        System.out.println(Math.round(10.51)); // 11
        System.out.println(Math.round(-10.5)); // -10
        System.out.println(Math.round(-10.51)); // -11
        System.out.println(Math.round(-10.6)); // -11
        System.out.println(Math.round(-10.2)); // -10
    }
}

Random类

Java中存在着两种Random函数:
一、java.lang.Math.Random;
调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是
[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:

package com.kuang.oop;

public class Test {
    public static void main(String[] args) {
        // 结果是个double类型的值,区间为[0.0,1.0)
        System.out.println("Math.random()=" + Math.random());
        // 注意不要写成(int)Math.random()*3,这个结果为0或1,因为先执行了强制转换
        int num = (int) (Math.random() * 3);
        System.out.println("num="+num);
    }
}
//结果
//Math.random()=0.44938147153848396([0,1)随机)
//num=1(/0/2)三者随机

二、java.util.Random
下面是Random()的两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
你在创建一个Random对象的时候可以给定任意一个合法的种子数,种子数只是随机算法的起源数字,
和生成的随机数的区间没有任何关系。

**在没带参数构造函数生成的Random对象的种子缺省是当前系统时间的毫秒数。 **

rand.nextInt(100)中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。

public static void main(String[] args) {
        Random rand = new Random();
        int i = rand.nextInt(100);//随机数上限取到100
        System.out.println(i);
    }

**使用带参构造函数时,对于种子(参数值)相同的Random对象,生成的随机数序列是一样的。 **

package com.kuang.oop;

import java.util.Random;

public class Test {
    public static void main(String[] args) {
        Random ran1 = new Random(25);
        System.out.println("使用种子为25的Random对象生成[0,100)内随机整数序列: ");
        for (int i = 0; i < 10; i++) {
            System.out.print(ran1.nextInt(100) + " ");//不论执行几次都是一个序列:81 28 47 38 97 98 95 37 96 54
        }
        System.out.println();
    }
}

【方法摘要】
\1. protected int next(int bits):生成下一个伪随机数。
\2. boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的
boolean值。
\3. void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
\4. double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间
均匀分布的 double值。
\5. float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分
布float值。
\6. double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正
态”)分布的double值,其平均值是0.0标准差是1.0。
\7. int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
\8. int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不
包括)之间均匀分布的int值。
\9. long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
\10. void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。
【例子】

【方法摘要】

  1. protected int next(int bits):生成下一个伪随机数。

  2. boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的
    boolean值。

  3. void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。

  4. double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间
    均匀分布的 double值。

  5. float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分
    布float值。

  6. double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正
    态”)分布的double值,其平均值是0.0标准差是1.0。

  7. int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

  8. int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不
    包括)之间均匀分布的int值。

  9. long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

  10. void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。
    【例子】

  11. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();

  12. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;

  13. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;

  14. 生成[0,10)区间的整数:int n2 = r.nextInt(10);

posted @ 2022-08-08 17:54  群青Bleu  阅读(22)  评论(0编辑  收藏  举报