有世代随机数的类:
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
永远不会是真正的随机。