zoukankan      html  css  js  c++  java
  • java 随机数产生 常用类及方法

    1、Random类

    Random():创建一个新的随机数生成器。

    new一个Random类的对象:

    Random r = new Random();

    利用该对象产生一个随机整数:
    常用nextInt,不过它有两个构造方法:

    (1)int x = r.nextInt(); //这样产生的随机数类似于c++的rand(),使用的时候需要取模,而且!!!它会产生负数!

    (2)int x = r.nextInt(100);  //这个会好用一些,产生的是0~99之间的整数

     Random(long seed):使用单个 long 种子创建一个新的随机数生成器。

    种子的作用请参考源代码:

    /**
         * Creates a new random number generator using a single {@code long} seed.
         * The seed is the initial value of the internal state of the pseudorandom
         * number generator which is maintained by method {@link #next}.
         *
         * <p>The invocation {@code new Random(seed)} is equivalent to:
         *  <pre> {@code
         * Random rnd = new Random();
         * rnd.setSeed(seed);}</pre>
         *
         * @param seed the initial seed
         * @see   #setSeed(long)
         */
        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);
            }
        }
    
        private static long initialScramble(long seed) {
            return (seed ^ multiplier) & mask;
        }

    有一个重点:由于random产生的随机数是伪随机数,所以当种子不变时,产生的随机数序列其实是不变的,也即可预测

    2、Math.random()

    会产生[0.0~1.0)之间的浮点数,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布

    如果要使用这个方法产生随机整数,参考下面这个例子:

    int x = (int)(Math.random()*n);

    产生[0,n)之间的整数

    以下备注参考:https://www.cnblogs.com/ningvsban/p/3590722.html

    备注:下面是Java.util.Random()方法摘要:

    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. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
    2. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
    3. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
    4. 生成-231到231-1之间的整数:int n = r.nextInt();
    5. 生成[0,10)区间的整数:

    int n2 = r.nextInt(10);//方法一

    n2 = Math.abs(r.nextInt() % 10);//方法二

  • 相关阅读:
    phalapi框架where条件查询
    yii2学习网站
    改变yii2 $form最外层div样式
    PHP库(数据抓取)
    yii框架场景的用法
    Yii框架数据查询
    更改控制台编码格式
    打开yii2控制台命令
    过滤器实现登录拦截
    SSM整合
  • 原文地址:https://www.cnblogs.com/PineZhuo/p/10647786.html
Copyright © 2011-2022 走看看