Random.nextInt() producing very similar numbers?
我编写了一个类来生成一个随机的Int数组,其数字在Java中的(0-100)之间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import java.util.Random;
public class RandomClass {
private Random randNum ;
public RandomClass () {
randNum = new Random();
}
public int[] generateRandomArray (int arraySize ){
int[] theArray = new int[arraySize ];
for(int i = 0; i < arraySize ; i ++){
theArray [i ] = randNum. nextInt(101);
}
return theArray ;
}
} |
出于某种原因,当我运行程序时,每次在Array输出中都会重复出现类似的数字序列。
以下示例显示了在不同时间执行的3次程序:
1 2 3 4 5
| Array result : [65, 71, 71, 71, 78, 78, 78, 78, 78, 78]
Array result : [40, 55, 55, 55, 62, 62, 62, 70, 77, 77]
Array result : [56, 56, 73, 73, 73, 73, 77, 77, 77, 77] |
为什么会这样? 是因为Random函数是基于时间的,并且循环运行得太快才能返回一个新的"随机"数字? 还是其他一些原因? 我该如何解决?
-
我可以排除一个猜测:Random.nextInt不是基于时间。它是一个线性同余生成器,可根据种子生成可预测但随机的数字序列。种子可能基于时间,但在您的代码中,只在首次创建Random对象时才执行一次。这三个是否运行RandomClass的同一个实例?或者您是否为每次运行创建一个新实例?
-
您是否还可以显示您调用generateRandomArray并打印它的部分?我想你可能每次需要一个数字时都会创建RandomClass对象。
-
@TedHopp啊,谢谢你的澄清。我现在将进行编辑,显示更多我的代码。不幸的是,我无法发布整个来源,因为这是一项任务。
-
好吧,简短的回答是你没有向我们展示出有问题的代码部分。如果你不能再发布任何代码,那么你不会在这里得到正确的答案。
-
我试过你的jdk代码,工作正常。 [9,45,13,??21,81,62,46,99,17,32] [15,56,69,20,23,24,2,47,19,46] [89,44,56,47] ,35,52,97,20,67,91] [53,22,63,17,57,41,42,15,23,27] [80,40,80,25,96,55,23,17] ,65,50] [69,14,88,41,46,5,92,2,100,53] [46,7,97,93,14,65,51,24,88,62] [32, 84,52,44,60,13,84,64,0,43] [37,80,34,72,19,19,64,16,88,33] [15,13,??92,18,75, 90,25,8,33,86]。您使用的是哪个jdk版本?
-
我怀疑问题在于如何打印结果。你能发布那段代码吗?
您发布的代码没有任何问题,只需添加一个main方法,您将看到:
1 2 3 4 5 6
| public static void main (String[] args ) {
for (int i = 0; i < 10; i ++) {
int[] ints = new RandomClass (). generateRandomArray(10);
System. out. println("RandomClass::main: ints =" + Arrays. toString(ints ));
}
} |
它打印非常不同的随机数。 问题出在其他地方。