掷骰子的Java方法每次都会返回“双精度”

时间:2018-09-18 13:31:15

标签: java dice seeding

我正在创建一个游戏,用户必须掷两个骰子,并根据掷出的东西来做某些事情。我有一种掷骰子的方法,我称之为两次以刺激掷骰子。

import java.util.Random;

public class test {

    public static int dice() {
        Random generator = new Random(System.currentTimeMillis());
        return generator.nextInt(6) +1;
    }

    public static void main(String[] args) {
        int roll1 = dice();
        int roll2 = dice();
        System.out.println(roll1);
        System.out.println(roll2);
    }
}

一致地,即使两个卷被单独调用,它们也会返回相同的编号。

注意:为了避免这种情况,我在当前时间为随机数生成器植入了种子。

非常感谢您的帮助,我是Java的新手!

1 个答案:

答案 0 :(得分:8)

之所以会这样,是因为您每次都在Random方法中创建一个新的dice()对象。当您多次(在同一毫秒内)快速调用该方法时,Random对象将具有相同的种子(基于当前系统时间),并将产生相同的随机数。

解决方案:不要每次都创建一个新的Random对象。创建一次,将其保存为成员变量,然后重复使用。

import java.util.Random;

public class test {

    private static final Random generator = new Random();

    public static int dice() {
        return generator.nextInt(6) + 1;
    }

    public static void main(String[] args) {
        int roll1 = dice();
        int roll2 = dice();
        System.out.println(roll1);
        System.out.println(roll2);
    }
}