我无法理解Seed中java.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回答。
答案 0 :(得分:8)
伪随机数生成器生成一系列数字。它 不是真正随机的,而是一般的数学计算 产生一个匹配某些理想分布的输出,和 没有明显的模式。为了产生这样的序列,那里 必须为状态存储,以便生成器能够生成下一个 该序列中的数字。每次使用某些状态时都会更新状态 上一步输出的一部分。
种子显式初始化此状态。 '种子'是一个起点 从某事物增长的角度来看。在这种情况下,序列 号。
这可用于始终生成相同的序列(通过使用 一个已知的恒定种子),这对确定性有用 行为。对于某些网络应用程序,这适用于调试, 密码学等。
或者,在您希望行为不可预测的情况下 (每次运行程序时总是不同,也许是纸牌游戏), 你可以播种可能会不断变化的数字,例如 时间。
序列的“随机性”不依赖于所选择的种子, 虽然它确实取决于不重播序列。
这应该回答你的问题。
答案 1 :(得分:7)
伪随机数生成器是用整数实现的,每当你要求一个数时,伪随机序列生成器函数就会转换成另一个整数。
该内部整数的初始值称为种子。我们的想法是每次实例化Random
时都设置不同,因为一旦分配了种子,伪随机序列就完全确定了。
如果你使用了new Random()
这个nullary构造函数,那么System.currentTimeMillis()
将用于种子,这几乎适用于所有情况。
答案 2 :(得分:2)
java.util.Random.setSeed(长种子):使用单个长种子设置此随机数生成器的种子
语法: 公共无效setSeed(长种子)
参数: seed-初始种子
使用相同种子构造的每个Random都会生成相同的 每次的数字模式。
因此,基本上,当我们想要获得 每次都使用相同的随机数序列(例如视频中的 游戏,调试等)
我强烈建议您回答以下问题:https://stackoverflow.com/a/23127798/9080948