生成随机数:更新种子

时间:2012-03-02 10:48:47

标签: java

我正在尝试在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]

3 个答案:

答案 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();
}