java random的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 11:56:25
在看think in java里41页有句代码random() rand=new random(47);
加个47什么意思,看他的解释没看明白
种子是什么意思。。。?就是从47开始随即生成数么?不加又会怎样?

这个47就是一个种子。你也可以用其它的整数如:1,48。。。。。等
不同的种子会产生不同的随机数。thinking in java的作者他用了一个47.也没什么特殊。用其它也可以

补------------
不是从47开始生成数。这么说吧:
Random() rand1=new Random(47);
Random() rand2=new Random(27);
则rand1.nextInt()的值不会等于rand2.nextInt()
就是加了一个种子后就可以使你调用方法后产生的数值不相同。

Random() rand=new Random();这样不加数字也可以。种子就是用来区分各个Random对象吧,可以说。

下面是官方解释:
“此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

简单的说 每次产生随机数和这个种子有关 要想了解细节那么要看厚厚的一本书啦 要想更加随机化 可以每次都指定不同的种子:
Random r = new Random();
r.setSeed(r.nextInt(48) + 1);
r.XX();

=====================================================================
Random
public Random(long seed)使用单个 long 种子创建一个新的随