带种子的java随机数 3 月,1 周 Questions & Answers 15376 参考:link text 我不能理解下面这句话,有人能给我举一些例子来说明下面的陈述吗 如果使用相同的种子创建了两个Random实例,并且对每个实例进行了相同的方法调用序列,则它们将生成并返回相同的数字序列
# 1 楼答案 Random类基本上是一个伪随机数生成器(也称为确定性随机位生成器),它生成一个近似随机数属性的数字序列。它通常不是随机的,而是确定性的,因为它可以由生成器中的小随机状态来确定(例如^{)。由于确定性的本质,如果在两个生成器上的方法和种子序列相同,则可以生成相同的结果
# 2 楼答案 这意味着,当你创建随机对象时(例如,在程序开始时),你可能希望从一个新种子开始。大多数人会选择一些与时间相关的值,比如滴答声的数量 如果你想调试你的程序,给定相同种子的数字序列是相同的这一事实实际上是非常方便的:确保你记录了种子值,如果出现问题,你可以使用相同的种子值在调试器中重新启动程序。这意味着您可以准确地重播场景。如果你使用真正的随机数生成器,这是不可能的
# 3 楼答案 既然你要举个例子: import java.util.Random; public class RandomTest { public static void main(String[] s) { Random rnd1 = new Random(42); Random rnd2 = new Random(42); System.out.println(rnd1.nextInt(100)+" - "+rnd2.nextInt(100)); System.out.println(rnd1.nextInt()+" - "+rnd2.nextInt()); System.out.println(rnd1.nextDouble()+" - "+rnd2.nextDouble()); System.out.println(rnd1.nextLong()+" - "+rnd2.nextLong()); } } 无论您运行Random实例的频率有多高,无论您使用的是什么平台或Java版本,这两个实例都将始终具有相同的输出: 30 - 30 234785527 - 234785527 0.6832234717598454 - 0.6832234717598454 5694868678511409995 - 5694868678511409995
# 4 楼答案 随机发生器是确定性的。给定相同的随机输入和相同的随机使用方法,返回到程序的伪随机数序列将是相同的,即使在不同机器上的不同运行 这就是为什么它是伪随机的——返回的数字在统计学上与随机数类似,只是它们可以可靠地预测。真正的随机数是不可预测的
# 5 楼答案 这些数字并不是真正随机的,给定相同的起始条件(种子)和相同的操作序列,将生成相同的数字序列。这就是为什么iea不能将基本随机类作为任何密码或安全相关代码的一部分,因为攻击者可能会找出正在生成的序列号并预测未来的数字 对于发出非确定性值的随机数生成器,请查看SecureRandom 更多信息请参见维基百科上的Random number generation, Computational methods
# 6 楼答案 使用相同的种子值,单独的Random实例将返回/生成相同的随机数序列;更多信息请点击此处: http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Tech/Chapter04/javaRandNums.html Ruby示例: class LCG; def initialize(seed=Time.now.to_i, a=2416, b=374441, m=1771075); @x, @a, @b, @m = seed % m, a, b, m; end; def next(); @x = (@a * @x + @b) % @m; end; end irb(main):004:0> time = Time.now.to_i => 1282908389 irb(main):005:0> r = LCG.new(time) => #<LCG:0x0000010094f578 @x=650089, @a=2416, @b=374441, @m=1771075> irb(main):006:0> r.next => 45940 irb(main):007:0> r.next => 1558831 irb(main):008:0> r.next => 1204687 irb(main):009:0> f = LCG.new(time) => #<LCG:0x0000010084cb28 @x=650089, @a=2416, @b=374441, @m=1771075> irb(main):010:0> f.next => 45940 irb(main):011:0> f.next => 1558831 irb(main):012:0> f.next => 1204687 基于a/b/m值,给定种子的结果将相同。这可以用来在两个地方生成相同的“随机”数,双方可以依赖于得到相同的结果。这对加密很有用;虽然很明显,这种算法在加密方面并不安全
# 1 楼答案
Random类基本上是一个伪随机数生成器(也称为确定性随机位生成器),它生成一个近似随机数属性的数字序列。它通常不是随机的,而是确定性的,因为它可以由生成器中的小随机状态来确定(例如^{)。由于确定性的本质,如果在两个生成器上的方法和种子序列相同,则可以生成相同的结果
# 2 楼答案
这意味着,当你创建随机对象时(例如,在程序开始时),你可能希望从一个新种子开始。大多数人会选择一些与时间相关的值,比如滴答声的数量
如果你想调试你的程序,给定相同种子的数字序列是相同的这一事实实际上是非常方便的:确保你记录了种子值,如果出现问题,你可以使用相同的种子值在调试器中重新启动程序。这意味着您可以准确地重播场景。如果你使用真正的随机数生成器,这是不可能的
# 3 楼答案
既然你要举个例子:
无论您运行
Random
实例的频率有多高,无论您使用的是什么平台或Java版本,这两个实例都将始终具有相同的输出:# 4 楼答案
随机发生器是确定性的。给定相同的随机输入和相同的随机使用方法,返回到程序的伪随机数序列将是相同的,即使在不同机器上的不同运行
这就是为什么它是伪随机的——返回的数字在统计学上与随机数类似,只是它们可以可靠地预测。真正的随机数是不可预测的
# 5 楼答案
这些数字并不是真正随机的,给定相同的起始条件(种子)和相同的操作序列,将生成相同的数字序列。这就是为什么iea不能将基本随机类作为任何密码或安全相关代码的一部分,因为攻击者可能会找出正在生成的序列号并预测未来的数字
对于发出非确定性值的随机数生成器,请查看SecureRandom
更多信息请参见维基百科上的Random number generation, Computational methods
# 6 楼答案
使用相同的种子值,单独的Random实例将返回/生成相同的随机数序列;更多信息请点击此处: http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Tech/Chapter04/javaRandNums.html
Ruby示例:
基于a/b/m值,给定种子的结果将相同。这可以用来在两个地方生成相同的“随机”数,双方可以依赖于得到相同的结果。这对加密很有用;虽然很明显,这种算法在加密方面并不安全