2015-11-10 88 views
0

我目前正试图以这种方式使-0.5和0.5之间的随机数:Java函数随机数

public static double RandomNumberGenerator(long seed) 
{ 
    Random r = new Random(seed); 
    return r.nextDouble() >= 0.5? 0.5 : -0.5; 

    //PRINTING AND USAGE, SHOULD GO ABOVE 
    //System.out.println("Object after seed 12222222: " + RandomNumberGenerator(12222222)); 
} 

然后我执行这样的:

for (int j = 0; j < weights_one.length ; j++) 
    { 
     weights_one[j] = RandomNumberGenerator(System.currentTimeMillis()); 
    } 

但它确实不正常的,因为我总是用权,这将是相同的结束,即

weights_one[0]: -0.5 
weights_one[1]: -0.5 
weights_one[2]: -0.5 
weights_one[3]: -0.5 
weights_one[4]: -0.5 

这是不好的,他们应该gausianly分布,我怎么能做到这一点?

回答

1

随机类创建伪随机数。我在代码中发现了两个错误:

  1. 对于每个循环迭代,您创建一个随机实例。只需在for的开头创建一个。
  2. 随机生成[0,1]之间的数字。要翻译为区间[-0.5,0.5],只需将0.5减去随机函数。

您的代码可以被替换为:

Random r = new Random(System.currentTimeMillis()); 
for (int j = 0; j < weights_one.length ; j++) 
{ 
    weights_one[j] = r.nextDouble() -0.5; 
} 
+0

我一直在做这个,这个项目 - 不正是这个功能,这么多小时我的脑袋耐火你能告诉我什么你意思是? –

+0

我刚刚修改了答案,向你展示了我的意思。 – xcesco