A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于清云 中级黑马   /  2012-4-19 14:54  /  7195 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、Random 对象的生成
   Random 类包含两个构造方法:
   a、public Random()
    该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个
   种子数构造 Random 对象。
我的疑问:和当前系统时间对应的相对时间有关的数字 是什么意思?
   b、public Random(long seed)
     该构造方法可以通过制定一个种子数进行创建。
    示例代码:
    Random r = new Random();
      Random r1 = new Random(10);
我的疑问:这里的这个所谓的种子数10到底起个什么作用?
      再次强调:种子数只是随机算法的起源数字,和生成的随机数字的区间无关。
我的疑问:这句话里 随机算法的起源数字 到底是什么意思?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
根据jdk1.6文档里面的解析:
1、public Random()创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。
2、public Random(long seed)使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值,该生成器可通过方法 next(int) 维护。
调用 new Random(seed) 等效于:
Random rnd = new Random();
rnd.setSeed(seed);
回复 使用道具 举报
Random()创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证此属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。

再详细说明可以去看下API帮助文档。
回复 使用道具 举报
1.Random 类表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备.
2.Random() 使用与时间相关的默认种子值,初始化 Random 类的新实例;Random(long seed) 使用指定的种子值初始化 Random 类的新实例 .
3.伪随机数是以相同的概率从一组有限的数字中选取的。 所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。
4.随机数的生成是从种子值开始。 如果反复使用同一个种子,就会生成相同的数字系列。 产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。 默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。
回复 使用道具 举报
liqian 发表于 2012-4-19 16:00
1.Random 类表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备.
2.Random() 使用与 ...

API文档我已经看过,还是这位哥们让我稍微多明白了点种子是啥,不过我想问我的问题中的那个种子数10可以换成其他的数吗?
回复 使用道具 举报
可以的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马