Java Random 随机数

Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。
构造方法:
public Random(long seed) //以一个long型的参数作为种子
public Random() //以系统时间的nanoTime作为种子
如果两个Random类的实例是同一个种子创建,对它们以同样的顺序调用,将会返回相同的数字序列,(注意:并不是相同的数值)

测试如下:

        Random r1 = new Random(10);
        Random r2 = new Random(10);
        System.out.println("结果1=======================");
        for(int i=0;i<5;i++){
            System.out.println(r1.nextInt()+":"+r2.nextInt());
        }
        System.out.println("结果2=======================");
        for(int i=0;i<5;i++){
            System.out.println(r1.nextInt(100)+":"+r2.nextInt(100));
        }

结果:

结果1=======================
-1157793070:-1157793070
1913984760:1913984760
1107254586:1107254586
1773446580:1773446580
254270492:254270492
结果2=======================
56:56
97:97
88:88
81:81
14:14

根据以上可以看出r1与r2生成的随机序列是一样的。
生成下一个随机数的算法:

 protected int next(int bits) {
        long oldseed, nextseed;
        AtomicLong seed = this.seed;
        do {
            oldseed = seed.get();
            nextseed = (oldseed * multiplier + addend) & mask;
        } while (!seed.compareAndSet(oldseed, nextseed));
        return (int)(nextseed >>> (48 - bits));
    }
由此可以得出:
1、只要​oldseed相同,那么nextseed就相同
2、每次生成完下一个随机数,会更新种子,所以即使是相同的nextInt(n) 但是得到的值也可能是不一样的(由输出的结果2可以看出)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值