【发布时间】:2012-10-22 06:24:49
【问题描述】:
下面的代码会产生一个有或没有偏差的随机数吗?
int numberToGenerate = 20;
int rangeUpperLimit = 30;
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
for (int i = 0; i < numberToGenerate; i++) {
int randomInt = random.nextInt(rangeUpperLimit);
// Do something with it.
}
这些值用于从长度为 30 的 String 中选择 chars,因此范围为 0-29。选择char 值的代码被省略,因为它与问题无关。
【问题讨论】:
-
您对异常的第一条评论是什么意思?另请注意,
nextInt已经有一个专属上限,因此您应该只使用rangeUpperLimit。 -
删除了这些并修复了代码。谢谢。
-
首先,java或者其他任何语言,都不产生随机数,它是伪随机的。因为随机类也使用一些逻辑来产生这些数字,所以它不是真正随机的。仅供参考。