0

有生成随机数的类:

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;
    }

但世代数始终相同。什么问题?

4

4 回答 4

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

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

于 2013-11-11T19:59:38.323 回答
0

你在 switch 的开头有一个 if 语句。仅当随机数 == 1 时才调用 switch。您可以摆脱 if 语句。

于 2013-11-11T19:58:14.253 回答
0

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

public crt createNewCrt() {
    Random random = new Random();
    int randomNumber = random.nextInt(4);

    switch (randomNumber) {
        case 0:
            /../
        case 1:
            /../

        default:
            break;
    }

    return null;
}
于 2013-11-11T19:59:38.293 回答
0

像这样为随机设置种子

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

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

于 2013-11-11T20:01:50.487 回答