美文网首页
Java基础系列10-Random随机数

Java基础系列10-Random随机数

作者: 只是甲 | 来源:发表于2021-08-12 14:48 被阅读0次

    一. java.lang.Math.Random

    作用:返回带正号的double值,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
    范围:[0.0,1.0)的左闭右开区间
    原理:Math.Random内部是调用的Java.util.Random无参构造器实现的

    代码:

    package Java_study;
    
    //无需导包
    public class suiji1 {
        public static void main(String[] args) {
            for (int i = 0; i < 5; i++) {
                System.out.println(Math.random());
            }
        }
    
    }
    

    测试记录:

    0.2656139815369676
    0.9545819797288358
    0.48223757014225377
    0.5396096975059794
    0.2549847220943994
    

    二. java.util.Random

    使用的是48-bit的种子,然后调用一个linear congruential formula线性同余 。如果两个Random实例使用相同的种子,并且调用同样的函数,那么生成的sequence是相同的.

    1. 无参构造Random():创建一个新的随机数生成器。
      1)无参构造器内部也是调用的有参构造器,只是种子是通过系统当前时间计算出来的一个long型数据,所以多次运行结果都不一样
    2. 有参构造Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
      1)有参构造在指定种子(seed)值不变的情况下,返回随机数的序列是固定的。

    方法摘要:

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

    范围

    1. double d1 = r.nextDouble();
      => 生成[0,1.0)区间的小数
    2. double d2 = r.nextDouble() * 5;
      => 生成[0,5.0)区间的小数
    3. double d3 = r.nextDouble() * 1.5 + 1;
      => 生成[1,2.5)区间的小数
    4. int n = r.nextInt();
      => 生成[-231,231-1)之间的整数
    5. 生成[0,10)区间的整数
      int n2 = r.nextInt(10);
      n2 = Math.abs(r.nextInt() % 10); //对10取余后,Math.abs取绝对值

    代码:

    package Java_study;
    
    import java.util.Random;
    
    public class suiji2 {
        public static void main(String[] args) {
            // 创建对象
            Random r = new Random();
            
            for (int x = 1; x <= 10; x++) {
                //获取随机数
                int number = r.nextInt();
                System.out.println("number:" + number);
            }
            
            System.out.println("----------");
            
            for (int x = 1; x <= 10; x++) {
                //获取随机数
                int number1 = r.nextInt(10);
                System.out.println("number1:" + number1);
            }
            System.out.println("----------");
            
            
            //如果获取一个1-100之间的随机数呢?
            int i = r.nextInt(100) + 1;
            
            System.out.println(i);
        }
    
    }
    

    测试记录:

    number:288284056
    number:1636033943
    number:657595534
    number:-2128946490
    number:1232717773
    number:1103976520
    number:1865262929
    number:1076542435
    number:879661990
    number:21193790
    ----------
    number1:9
    number1:6
    number1:0
    number1:6
    number1:7
    number1:4
    number1:1
    number1:6
    number1:6
    number1:1
    ----------
    93
    

    参考:

    1. https://blog.csdn.net/qq_43529621/article/details/113250176

    相关文章

      网友评论

          本文标题:Java基础系列10-Random随机数

          本文链接:https://www.haomeiwen.com/subject/djcmyltx.html