【问题标题】:Java method for rolling dice returns 'doubles' every time [duplicate]每次掷骰子的Java方法都返回“双倍”[重复]
【发布时间】:2018-09-18 13:31:15
【问题描述】:

我正在创建一个游戏,用户必须掷两个骰子并根据掷出的结果做某些事情。我有一种掷骰子的方法,我调用了两次来刺激掷两个骰子。

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】:

    这是因为您每次都在 dice() 方法中创建一个新的 Random 对象。当您多次快速调用该方法时(在同一毫秒内),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);
        }
    }
    

    【讨论】:

    • 感谢您的解释,这行得通!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2019-03-31
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多