zoukankan      html  css  js  c++  java
  • random.nextInt()与Math.random()基础用法

    相关文章:关于Random(47)与randon.nextInt(100)的区别

    1、来源

    random.nextInt() 为 java.util.Random类中的方法;

    Random类中还提供各种类型随机数的方法:  

    nextInt():返回一个随机整数(int)  

    nextInt(int n):返回大于等于0、小于n的随机整数(int)  

    nextLong():返回一个随机长整型值(long)  

    nextBoolean():返回一个随机布尔型值(boolean)  

    nextFloat():返回一个随机浮点型值(float)  

    nextDouble():返回一个随机双精度型值(double)  

    nextGaussian():概率密度为高斯分布的双精度值(double)


    Math.random() 为 java.lang.Math 类中的静态方法Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值[0,1)

    2、用法

    产生0-n的伪随机数(伪随机数参看最后注解):

    // 两种生成对象方式:带种子和不带种子(两种方式的区别见注解)
    Random random = new Random();
    Integer res = random.nextInt(n);
    Integer res = (int)(Math.random() * n);
    //例如产生[1000,9999]
    res = (int)(Math.random() * 9000+1000);

    注:何谓伪随机数

    伪随机既有规则的随机,Random类中的随机算法就是伪随机。
    具体表现为:相同种子数的Random对象生成的随机数序列相同:

    @Test
    public void createProjectNo() {
         Random r1 = new Random(100);
         Random r2 = new Random(100);
    
         for (int i = 0; i < 100; i ++) {
             System.out.println(r1.nextInt(10)+", "+r2.nextInt(10));
         }
     }

    结果为:
    随机数生成结果

    如不想生成相同的随机数序列,则应只使用一个Random类。而Math类中的随机数生成器 randomNumberGenerator 对象为静态的,可考虑使用。

    3、注:Random类的两种构造方法区别

    1、 源码

    public Random() {
      this(seedUniquifier() ^ System.nanoTime());
    }
    
    public Random(long seed) {
        if (getClass() == Random.class)
            this.seed = new AtomicLong(initialScramble(seed));
        else {
            // subclass might have overriden setSeed
            this.seed = new AtomicLong();
            setSeed(seed);
        }
    }

    2、区别
    从源码中可以看到,未定义种子的构造方法里,使用当前系统时间相关的一个数字作为种子数,该种子数只作为随机算法的起源数字,与生成的随机数区间无关系。

  • 相关阅读:
    两种方法生成随机字符串
    cmd命令总结
    NOI前乱写
    多校模拟9
    字符串 口胡
    HEOI2020游记
    省选模拟104
    省选模拟103
    省选模拟102
    省选模拟101
  • 原文地址:https://www.cnblogs.com/lijingran/p/9046315.html
Copyright © 2011-2022 走看看