Java 的随机 class 行为说明
Java's Random class behaviour clarification
我有一个 class 'A' 包含一个 Random 实例,它模拟掷骰子,例如6 面,结果在每个 'roll'.
上生成 1 - 6
我有另一个 class 'B' 可能包含对类型 A 对象的引用,并且应该委托给它的 'roll' 方法。
另一个人需要编写一个单元测试来评估 class B 中的方法是否正确地委托给 class A 中的 'roll' 方法。为此,我只需要调用该方法 X 次并检查分数是否更新。
目前在单元测试中,我有一个循环,最多循环 1000 次,如果分数没有更新,那么我认为相同的数字连续滚动 1000 次是不可能的次!然而,我凭空选择了数字 1000。我想根据 Java 的随机 class.
的实际行为选择一个更准确的数字
从阅读 API 它说它是 "a linear congruential pseudorandom number generator.."。我要确定的是基于它使用 48 位,是否有很多次不可能重复相同的值。例如。在我可以生成数字 1 - 6 的场景中,是否说不可能获得相同的数字,例如6、连续超过20次?如果有人知道,我正在寻找该信息。
更新——我会让问题更简单。使用 Java 随机 class,如果我调用 nextInt(6),我有多少次可以连续收到相同的结果。例如。数学上是否存在基于 48 位种子和随机算法工作原理的限制 class?我想要一个说明,例如"It is categorically impossible to get the same result more than X times" X 是我的答案。
通常你会尝试模拟 class A(即使用 Mockito)。 是一个 SO 问题/答案,展示了如何验证一个方法是否被调用了 n 次。
根据文档,Random
使用的 PRNG 只有 248 个不同的状态。因此,用 nextInt(6)
生成的数字序列最多以 248.
的周期重复
我们可以假设所有 6 种可能的结果最终都是独立于种子值生成的,否则,生成器的质量非常差。因此,必须有一个极限 X < 248 满足 "It is categorically impossible to get the same result more than X times".
然而,要找到最小的这样的 X 并不容易。暴力法会生成248个连续的数字,然后检查。
我有一个 class 'A' 包含一个 Random 实例,它模拟掷骰子,例如6 面,结果在每个 'roll'.
上生成 1 - 6我有另一个 class 'B' 可能包含对类型 A 对象的引用,并且应该委托给它的 'roll' 方法。
另一个人需要编写一个单元测试来评估 class B 中的方法是否正确地委托给 class A 中的 'roll' 方法。为此,我只需要调用该方法 X 次并检查分数是否更新。
目前在单元测试中,我有一个循环,最多循环 1000 次,如果分数没有更新,那么我认为相同的数字连续滚动 1000 次是不可能的次!然而,我凭空选择了数字 1000。我想根据 Java 的随机 class.
的实际行为选择一个更准确的数字从阅读 API 它说它是 "a linear congruential pseudorandom number generator.."。我要确定的是基于它使用 48 位,是否有很多次不可能重复相同的值。例如。在我可以生成数字 1 - 6 的场景中,是否说不可能获得相同的数字,例如6、连续超过20次?如果有人知道,我正在寻找该信息。
更新——我会让问题更简单。使用 Java 随机 class,如果我调用 nextInt(6),我有多少次可以连续收到相同的结果。例如。数学上是否存在基于 48 位种子和随机算法工作原理的限制 class?我想要一个说明,例如"It is categorically impossible to get the same result more than X times" X 是我的答案。
通常你会尝试模拟 class A(即使用 Mockito)。
根据文档,Random
使用的 PRNG 只有 248 个不同的状态。因此,用 nextInt(6)
生成的数字序列最多以 248.
我们可以假设所有 6 种可能的结果最终都是独立于种子值生成的,否则,生成器的质量非常差。因此,必须有一个极限 X < 248 满足 "It is categorically impossible to get the same result more than X times".
然而,要找到最小的这样的 X 并不容易。暴力法会生成248个连续的数字,然后检查。