生成随机数 java



有世代随机数的类:

public class RandomNumber {
    public static int getRandomNumber(int n) {
        return new Random().nextInt(n);
    }
}

在我的交换机中使用它

public crt createNewCrt() {
        if (RandomNumber.getRandomNumber(4) == 1) {
            switch (RandomNumber.getRandomNumber(4)) {
            case 0:
                /../
            case 1:
                /../
            default:
                break;
            }
        }
        return null;
    }

但世代数总是相同的。什么问题?

public class RandomNumber {
    private static Random r = new Random();
    public static int getRandomNumber(int n) {
        return r.nextInt(n);
    }
}

将您的随机生成更改为此。如果您非常快速地实例化 Random 类两次,它将使用相同的种子并生成相同的数字。如果您将对象保存在静态字段中,那么您会不断从同一种子中获取下一个数字,而不是一遍又一遍地获取第一个数字。

在开关的开头有一个 if 语句。仅当随机数 == 1 时才调用开关。你可以去掉 if 语句。

我不完全确定您为什么要使用单独的方法。 为什么不做:

public crt createNewCrt() {
    Random random = new Random();
    int randomNumber = random.nextInt(4);
    switch (randomNumber) {
        case 0:
            /../
        case 1:
            /../
        default:
            break;
    }
    return null;
}

这样为随机设置种子

Random r = new Random(System.currentTimeMillis());

因为随机总是基于计算,所以Random永远不会是真正的随机。

最新更新