我使用一个简单的随机计算的一个小范围内有4个元素。
indexOfNext = new Random().nextInt(4); //randomize 0 to 3当我附加调试器时,我会看到,对于第一个2-3次,每次的结果是1。
这是对一个小范围错误的方法,还是我应该实现另一个逻辑(检测先前的随机结果)?
注意:如果这只是巧合,那么使用这种方法是错误的,对吗?如果是,你能提出替代方法吗?也许是洗牌?理想情况下,替代方法可以检查下一个结果是否与前一个结果相同。
发布于 2014-04-07 14:56:08
不要每次创建一个new Random(),创建一个对象并多次调用它。
这是因为您需要一个随机生成器和它的多个数字
随机序列,而不是有许多随机生成器和
它们产生的随机序列的第一个数。
发布于 2014-04-07 14:56:38
通过反复创建一个新实例,您滥用了随机数生成器。(这是由于实现设置了一个起始随机数值,这是系统时钟时间的一个非常确定的函数)。这破坏了生成器的统计特性。
您应该创建一个实例,然后在需要数字时调用nextInt。
发布于 2014-04-07 14:57:04
你能做的一件事就是抓住随机实例。它必须在每次实例化它时自己播种,如果该种子是相同的,那么它每次都会生成相同的随机序列。
其他选项正在转换为SecureRandom,但您肯定希望保留该随机实例以获得最佳的随机数性能。您真正需要的只是SecureRandom,您是在随机生成具有安全含义的东西。比如实现密码算法或者处理类似的事情。
https://stackoverflow.com/questions/22915937
复制相似问题