util.Random中的种子是什么?

时间:2014-03-20 10:53:44

标签: java random

我无法理解Seedjava.util.Random的含义是什么?我读过Why does this code print “hello world”?个问题,但我仍然对种子感到困惑。任何人都可以亲切地形容我种子究竟是什么意思?感谢。

setSeed()方法的文档中......什么意思是seed - the initial seed

  

public void setSeed (长种子)
  使用单个长种子设置此随机数生成器的种子。 setSeed的一般契约是它改变了这个随机数生成器对象的状态,以便与刚刚用参数种子作为种子创建的状态完全相同。方法setSeed由类Random实现,通过原子方式将种子更新为
  (seed ^ 0x5DEECE66DL)&amp; ((1L <48)-1)
  并清除nextGaussian()使用的haveNextNextGaussian标志   类Random的setSeed的实现恰好只使用给定种子的48位。然而,通常,重写方法可以使用长参数的所有64位作为种子值。   的参数
  种子 - 初始种子

我希望如果我能理解seed的确切含义,我相信我会清楚地理解this回答。

3 个答案:

答案 0 :(得分:8)

  

伪随机数生成器生成一系列数字。它   不是真正随机的,而是一般的数学计算   产生一个匹配某些理想分布的输出,和   没有明显的模式。为了产生这样的序列,那里   必须为状态存储,以便生成器能够生成下一个   该序列中的数字。每次使用某些状态时都会更新状态   上一步输出的一部分。

     

种子显式初始化此状态。 '种子'是一个起点   从某事物增长的角度来看。在这种情况下,序列   号。

     

这可用于始终生成相同的序列(通过使用   一个已知的恒定种子),这对确定性有用   行为。对于某些网络应用程序,这适用于调试,   密码学等。

     

或者,在您希望行为不可预测的情况下   (每次运行程序时总是不同,也许是纸牌游戏),   你可以播种可能会不断变化的数字,例如   时间。

     

序列的“随机性”不依赖于所选择的种子,   虽然它确实取决于不重播序列。

取自What is a seed in relation to a random number generation algorithm and why is computer time used to create this seed more often than not?

这应该回答你的问题。

答案 1 :(得分:7)

伪随机数生成器是用整数实现的,每当你要求一个数时,伪随机序列生成器函数就会转换成另一个整数。

该内部整数的初始值称为种子。我们的想法是每次实例化Random时都设置不同,因为一旦分配了种子,伪随机序列就完全确定了。

如果你使用了new Random()这个nullary构造函数,那么System.currentTimeMillis()将用于种子,这几乎适用于所有情况。

答案 2 :(得分:2)

java.util.Random.setSeed(长种子):使用单个长种子设置此随机数生成器的种子

语法: 公共无效setSeed(长种子)

参数: seed-初始种子

  

使用相同种子构造的每个Random都会生成相同的   每次的数字模式

     

因此,基本上,当我们想要获得   每次都使用相同的随机数序列(例如视频中的   游戏,调试等)

我强烈建议您回答以下问题:https://stackoverflow.com/a/23127798/9080948

和此视频:https://youtu.be/86_cnhqSyh0