【发布时间】:2015-06-11 02:47:51
【问题描述】:
当我运行以下代码时,无论我为for 循环使用什么范围,代码总是会打印出true 十次。
public static void main(String[] args)
{
Random bool = new Random();
for (int i = 0; i < 10; i++) {
bool.setSeed(i);
System.out.println(bool.nextBoolean());
}
}
但是,如果我对代码稍作更改并让随机生成器在打印前运行一次nextBoolean() 函数,我会在输出中得到true 和false 的正态分布,当我更改时会发生变化for循环的范围:
public static void main(String[] args)
{
Random bool = new Random();
for (int i = 0; i < 10; i++) {
bool.setSeed(i);
bool.nextBoolean(); //Only change
System.out.println(bool.nextBoolean());
}
}
在我看来nextBoolean()函数在第一次执行时总是返回true,这种行为有什么原因吗?
【问题讨论】:
-
你认为
setSeed会做什么? -
无法保证简单地将种子更改为 Random 对象会更改 nextBoolean() 返回的第一个布尔值或第二个布尔值。
-
不应该每次都为随机生成器创建不同的
true和false模式吗? -
没有。随机生成器需要始终为相同的种子返回相同的序列。这是最重要的属性之一。
-
您测试了 2^32 个可能的整数中的 10 个值,并声称“nextBoolean() 函数始终返回 true”。对于完成如此大量的研究来说,这是一个非常有力的主张。