滚动骰子的Java方法每次都会返回“双打”[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我正在创建一个游戏,用户必须滚动两个骰子并根据滚动的内容做某些事情。我有一种掷骰子的方法,我打电话两次以刺激掷骰子。

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新手!

java dice seeding
1个回答
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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.