4
我想模拟http://blog.xkcd.com/2010/02/09/math-puzzle/上找到的数学难题。然而,java随机类正在返回奇怪的结果。在下面的代码中,结果是预期的。第一行输出约为.612,第二行输出在.49和.51之间。 int trials = 10000000; int success = 0;Java随机类不是真正的随机?
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();
输出是所述第一数量的第二周围0.476和0.710。这意味着nextBoolean()方法在后面的配置中70%的时间返回true。我做错了什么或者这只是一个错误?
@bmargulies我认为它不够可怕。但它绝对过于本地化。 –
这只是另一个拥有太多“随机”对象的人。 – bmargulies
呃,那个提议的傻瓜根本就不是傻瓜!这个问题有一个完全不同的问题,因为随机数发生器根本不是在循环内部构建的。我全部是为了解决重复的问题,但只有当他们是真实的而不是想象中的愚蠢时:-) – paxdiablo