Java Math Random 类 方法 构造器 实例

Math

  • 位于java.lang.Math,直接使用,无需导包。
  • public final class Math,final修饰类,这个类不能被继承
  • private Math() {}构造器私有化,不能创建Math类的对象
  • Math内部的所有的属性,方法都被static修饰:类名.方法名直接调用,无需创建对象:
  • 可使用静态方法默认使用Math方法import static java.lang.Math.*;

字段

  • static double E

    public static final double E = 2.7182818284590452354;
    比任何其他值都更接近 e(即自然对数的底数)的 double 值。

  • static double PI

    public static final double PI = 3.14159265358979323846;

    比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

方法

Modifier and Type方法描述
static double/ float/int/longabs(double/float/int/long a)返回 double/float/int/long 值的绝对值。
static doubleacos(double a)返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。
static doubleasin(double a)返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。
static doubleatan(double a)返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。
static doubleatan2(double y, double x)将矩形坐标 (x, y) 转换成极坐标 (r, theta),返回所得角 theta
static doublecbrt(double a)返回 double 值的立方根。
static doubleceil(double a)返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
static doublecopySign(double magnitude, double sign)返回带有第二个浮点参数符号的第一个浮点参数。
static floatcopySign(float magnitude, float sign)返回带有第二个浮点参数符号的第一个浮点参数。
static doublecos(double a)返回角的三角余弦。
static doublecosh(double x)返回 double 值的双曲线余弦。
static doubleexp(double a)返回欧拉数 edouble 次幂的值。
static doubleexpm1(double x)返回 ex -1。
static doublefloor(double a)返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
static intgetExponent(double d)返回 double 表示形式中使用的无偏指数。
static intgetExponent(float f)返回 float 表示形式中使用的无偏指数。
static doublehypot(double x, double y)返回 sqrt(x2 +y2),没有中间溢出或下溢。
static doubleIEEEremainder(double f1, double f2)按照 IEEE 754 标准的规定,对两个参数进行余数运算。
static doublelog(double a)返回 double 值的自然对数(底数是 e)。
static doublelog10(double a)返回 double 值的底数为 10 的对数。
static doublelog1p(double x)返回参数与 1 之和的自然对数。
static double/ float/int/longmax(double/float/int/longa, double/float/int/longb)返回两个 double/float/ int/long 值中较大的一个。
static double/ float/int/longmin(double/float/int/long a, double/float/int/long b)返回两个 double/float/ int/long 值中较小的一个。
static doublenextAfter(double start, double direction)返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。
static floatnextAfter(float start, double direction)返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。
static doublenextUp(double d)返回 d 和正无穷大之间与 d 相邻的浮点值。
static floatnextUp(float f)返回 f 和正无穷大之间与 f 相邻的浮点值。
static doublepow(double a, double b)返回第一个参数的第二个参数次幂的值。
static doublerandom()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
static doublerint(double a)返回最接近参数并等于某一整数的 double 值。
static longround(double a)返回最接近参数的 long
static intround(float a)返回最接近参数的 int
static doublescalb(double d, int scaleFactor)返回 d × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 double 值集合中的一个值。
static double/floatscalb(double/float d/f, int scaleFactor)返回 f × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 float 值集合中的一个值。
static double/floatsignum(float d/f)返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。
static doublesin(double a)返回角的三角正弦。
static doublesinh(double x)返回 double 值的双曲线正弦。
static doublesqrt(double a)返回正确舍入的 double 值的正平方根。
static doubletan(double a)返回角的三角正切。
static doubletanh(double x)返回 double 值的双曲线余弦。
static doubletoDegrees(double angrad)将用弧度表示的角转换为近似相等的用角度表示的角。
static doubletoRadians(double angdeg)将用角度表示的角转换为近似相等的用弧度表示的角。
static double/floatulp(double/float d/f)返回参数的 ulp 大小。

实例

public class Test {
    public static void main(String[] args) {
        //常用属性:
        System.out.println(Math.PI); //3.141592653589793
        //常用方法:
        System.out.println("随机数:"+Math.random()); //随机数:0.44787341064736186。[0.0,1.0)
        System.out.println("绝对值:"+Math.abs(-8)); //绝对值:8
        System.out.println("向上取值:"+Math.ceil(7.1)); //向上取值:8.0
        System.out.println("向下取值:"+Math.floor(8.88)); //向下取值:8.0
        System.out.println("四舍五入:"+Math.round(4.5)); //四舍五入:5
        System.out.println("取最大值:"+Math.max(6, 8)); //取最大值:8
        System.out.println("取最小值:"+Math.min(6, 8)); //取最小值:6
    }
}

静态导入

import static java.lang.Math.*;

public class Test {
    public static void main(String[] args) {
        //常用属性:
        System.out.println(PI); //3.141592653589793
        //常用方法:
        System.out.println("随机数:"+random()); //随机数:0.257254104809876。[0.0,1.0)
        System.out.println("绝对值:"+abs(-8)); //绝对值:8
        System.out.println("向上取值:"+ceil(7.1)); //向上取值:8.0
        System.out.println("向下取值:"+floor(8.88)); //向下取值:8.0
        System.out.println("四舍五入:"+round(4.5)); //四舍五入:5
        System.out.println("取最大值:"+max(6, 8)); //取最大值:8
        System.out.println("取最小值:"+min(6, 8)); //取最小值:6
    }
}

Math.random()

  • 底层使用Random()类实现
public static double random() { //返回Random对象
    // nextDouble()在 [0.0 , 1.0) 之间生产的 double 值。
    return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}

private static final class RandomNumberGeneratorHolder {
    static final Random randomNumberGenerator = new Random();
}

Random

本类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改

很多应用程序会发现 Math.random() 方法更易于使用。

构造方法

  • Random()
    创建一个新的随机数生成器。 实际上底层还是使用Random(long seed)

      ```java
          public Random() {
              this(seedUniquifier() ^ System.nanoTime());
          }
      ```
    
  • Random(long seed)
    使用单个 long 种子创建一个新的随机数生成器。

方法

Modifier and Type方法描述
protected intnext(int bits)生成下一个伪随机数。
booleannextBoolean()返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
voidnextBytes(byte[] bytes)生成随机字节并将其置于用户提供的 byte 数组中。
doublenextDouble()返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
floatnextFloat()返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
doublenextGaussian()返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double 值,其平均值是 0.0,标准差是 1.0。
intnextInt()返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
intnextInt(int n)返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
longnextLong()返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
voidsetSeed(long seed)使用单个 long 种子设置此随机数生成器的种子。

实例

public class Ran {
    public static void main(String[] args) {
        //利用带参数的构造器创建对象:
        Random r1 = new Random(System.currentTimeMillis());
        int i = r1.nextInt();
        System.out.println(i);
        
        //利用空参构造器创建对象:
        Random r2 = new Random();//实际底层还是调用了带参构造器
        System.out.println(r2.nextInt(10));//在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
        System.out.println(r2.nextDouble());//在 0.0 和 1.0 之间均匀分布的 double 值。
    }
}
posted @ 2021-08-09 13:05  SKPrimin  阅读(88)  评论(0编辑  收藏  举报