gpt4 book ai didi

Java 随机类不是真正随机的吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:17:41 25 4
gpt4 key购买 nike

我正在尝试模拟我在 http://blog.xkcd.com/2010/02/09/math-puzzle/ 上找到的数学难题.但是,java 随机类返回奇怪的结果。在下面的代码中,结果是预期的。第一行的输出大约在 0.612 左右,第二行在 0.49 和 0.51 之间。 国际试验 = 10000000; int 成功 = 0;

    int returnstrue = 0;

for (int i = 0; i < trials; i++) {
Random r = new Random();
//double one = r.nextDouble()*10000;
//double two = r.nextDouble()*10000;
double one = 1;
double two = Math.PI;


double check = r.nextDouble();
boolean a = r.nextBoolean();


if(a)
{
returnstrue++;
}
if(a){
if((check>p(one)) && two > one)
{
success++;
}
if((check<p(one))&& two<one)
{
success++;
}
}
else{
if((check>p(two)) && two < one)
{
success++;
}
if((check<p(two))&& two>one)
{
success++;
}
}
}
System.out.println(success/(double)trials);
System.out.println(returnstrue/(double)trials);

但是,当我切换

的行时
 double check = r.nextDouble();
boolean a = r.nextBoolean();

  boolean a = r.nextBoolean();
double check = r.nextDouble();

第一个数字的输出约为 .476,第二个数字约为 .710。这意味着 nextBoolean() 方法在后面的配置中有 70% 的时间返回 true。我做错了什么还是这只是一个错误?

最佳答案

r 的实例化移到 for 循环之外,如:

Random r = new Random();
for (int i = 0; i < trials; i++) {
:
}

您现在正在做的是在每次循环迭代时创建一个新的,并且由于种子是基于时间(毫秒)的,因此您可能会得到很多相同的 种子。

这几乎肯定是导致您的结果出现偏差的原因。

所以,是的,它一个错误,只是在您的代码中,而不是在 Java 中。当人们问这个问题时,大约 99.9999% 的情况往往是这种情况,因为 Java 本身一直在接受世界各地数百万人的测试,而你的代码片段已经被测试过,好吧,只有你 :-)

关于Java 随机类不是真正随机的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com