【发布时间】:2015-02-09 11:04:43
【问题描述】:
我已经编写了一个类来生成一个随机 Int 数组,其数字在 Java 中介于 (0-100) 之间:
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 次:
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 啊,感谢您澄清这一点。我将进行编辑,现在显示更多我的代码。不幸的是,我不能发布整个源代码,因为这是一个作业。
-
嗯,简短的回答是您没有向我们展示有问题的代码部分。如果您不能再发布任何代码,那么您将不会在这里得到正确的答案。
-
我怀疑问题在于您打印结果的方式。你能发布那个代码吗?