8

我需要对调用Math.random(). 我知道如果我实例化自己的 Random 对象以产生可重复的结果,我可以设置种子。有没有办法做到这一点Math.random()

4

3 回答 3

12

该方法Math.random()使用私有静态字段:

private static Random randomNumberGenerator;

如果您真的需要将其设置为 a new Random(CONSTANT_SEED)(例如,您需要 JUNit 测试您无法控制的代码),您可以使用反射来实现。

于 2010-05-14T19:24:35.840 回答
9

如何创建Random自己的实例并使用它呢?Math.random()创建一个并使用它,所以我认为你不能弄乱它的种子。但是,如果您创建Random并直接使用它,您可以在创建它时为其设置种子,和/或您可以setSeed()稍后调用它。

于 2010-05-14T18:48:49.660 回答
3

使用您的种子使用 Random 实例设置它,或者只是扩展方法以返回您需要的值

        Field field = Math.class.getDeclaredField("randomNumberGenerator");
        field.setAccessible(true);
        field.set(null, new Random() {

            @Override
            public double nextDouble() {
                return 1;
            }

        });
于 2013-02-19T10:10:35.203 回答