Java——Random中的 seed 初步探索

本文通过实例解释了 Java 中 Random 类的使用方法,重点探讨了构造函数参数的作用,并展示了相同种子产生的随机数序列的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在回头看《Thinking in Java》这本书中,经常看见这样的一段代码。

 

Random rand = new Random(47);  
int i = rand.nextInt(100);  

我们都知道可以通过 Random 取得一定范围的随机数,但一看到这段代码,不禁纳闷,这。。。。就产生了以下的疑问

i 是得到一个小于100的整型数据呢?还是得到一个小于47的整型数据?

 

有这疑问便编译运行一下程序,得到的结论是“得到的随机数小于100的”,那么又有一个疑问,那。。。47 是干嘛用的?

在网上搜索了一波资料,自己也动手搞搞,总结一下。

先来看看代码:

 

public class RandomTest {
    public static void main(String[] args) {
        Random random1 = new Random(1);
        Random random2 = new Random(1);
        Random random3 = new Random(1);
        Random random4 = new Random(2);

        System.out.println(random1.nextInt(200));
        System.out.println(random2.nextInt(200));
        System.out.println(random3.nextInt(200));
        System.out.println("-----------------------");

        System.out.println(random4.nextInt(200));
        System.out.println("-----------------------");

        System.out.println(random1.nextInt(200));
        System.out.println(random3.nextInt(200));
        System.out.println(random2.nextInt(200));
        System.out.println("-----------------------");

        System.out.println(random3.nextInt(200));
        System.out.println(random3.nextInt(200));
        System.out.println("-----------------------");

        System.out.println(random4.nextInt(200));
    }
}

 

编译运行后的结果:

 

185
185
185
-----------------------
108
-----------------------
188
188
188
-----------------------
47
113
-----------------------
172

 

seed 为 1 的 Random 对象有三个,也就相当于将这三个绑在一起了,这三个对象第一波求得随机数都一样,第二波也是一样,但第二波的随机数和第一波的不一样。

seed 为 2 的 Random 对象仅有一个,没人愿意当它的小伙伴,每波求得的随机数都不一样

 

so~~

  • seed 为 x 的 Random 对象有 n 个,那这 n 个对象在第 M(1,2,3,.....) 次求得的随机数都是一样的。
  • seed 就理解它是一个标识,看同标识的有多少个对象,将这些对象“绑”在一起。

 

PS:

以上是个人对于自己不懂之处总结一番而已,对于Random类的总结并不全面,之前想从源代码分析的,个人对于源码理解不深,怕误导大家,如果有哪位大大留言指导一番,非常感谢!

 

给大家介绍一篇给讲的更为详细的文章

 

 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值