我正在尝试在0和1之间生成几个随机双打。这是我运行的代码,但回来的数字非常接近。我想要在[0,1]或至少[0,1]上均匀分布的数字。我
public class MyClass
long seed = System.currentTimeMillis();
......
public double returnRandom() {
Random rand = new Random();
seed += 4; //update the seed
rand.setSeed(seed);
return rand.nextDouble();
}
(循环遍历数组)我最终得到:
[0.10233441769044727]
[0.10484270731218648]
[0.1044843653222054]
[0.10412603823338551]
答案 0 :(得分:4)
我建议您不要更新种子。你也应该使Random实现一个类实例,而不是每次调用该方法时都实例化它。
public class MyClass {
private Random random = new Random(System.currentTimeMillis());
public double returnRandom() {
return this.random.nextDouble();
}
}
答案 1 :(得分:1)
您不需要更新Random
对象的种子 - 事实上,这可能是一件坏事。
Random r = new Random();
for(int i=0; i<10; i++){
System.out.println(r.nextDouble());
}
输出:
0.42997799629765443
0.025965300992295326
0.6819794805907442
0.5766417169200183
0.2709962942207633
0.5094285626768145
0.9364741774517189
0.7849361529399873
0.512486723637452
0.32604095225979
答案 2 :(得分:1)
尝试Math.random()
它在[0,1]中给出一个统一的分布 - 它在幕后创建一个Random对象,并对所有后续调用使用相同的对象。 E.g
public double returnRandom() {
return Math.random();
}