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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡建彪 黑马帝   /  2012-10-26 20:09  /  1414 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。
随机数发生器(Random)对象产生以后,通过调用不同的method:nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。
1>生成随机数
Random random = new Random();
Random random = new Random(100);//指定种子数100
random调用不同的方法,获得随机数。
如果2个Random对象使用相同的种子(比如都是100),并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同。
例如:
import java.util.*;
class TestRandom {
public static void main(String[] args) {
    Random random1 = new Random(100);
    System.out.println(random1.nextInt());
    System.out.println(random1.nextFloat());
    System.out.println(random1.nextBoolean());

    Random random2 = new Random(100);
    System.out.println(random2.nextInt());
    System.out.println(random2.nextFloat());
    System.out.println(random2.nextBoolean());
    }
}
结果发现 random1和random2  的结果完全相同。如果打印的顺序不一致,那么结果就不同。求大神们释疑。
但是当Random random1 = new Random(); 没有设定种子后,就是以System.currentTimeMillons().作为种子的,当然打印结果就不一致了。


评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

2 个回复

正序浏览
qhasilver 发表于 2012-10-26 20:32
API中这样写道:
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成 ...

Thanks  for replying.
回复 使用道具 举报
API中这样写道:
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

个人觉得:把顺序颠倒之后结果会不一样是因为每次取出伪随机数前会参考上一次取值的结果,尽量不重复,这是设立随机数的初衷

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马