【问题标题】:Random.nextInt() producing very similar numbers?Random.nextInt() 产生非常相似的数字?
【发布时间】: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 啊,感谢您澄清这一点。我将进行编辑,现在显示更多我的代码。不幸的是,我不能发布整个源代码,因为这是一个作业。
  • 嗯,简短的回答是您没有向我们展示有问题的代码部分。如果您不能再发布任何代码,那么您将不会在这里得到正确的答案。
  • 我怀疑问题在于您打印结果的方式。你能发布那个代码吗?

标签: java arrays random time


【解决方案1】:

你贴的代码没有问题,只要添加一个main方法,你就会看到:

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

它打印出非常不同的随机数。问题出在其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2023-03-11
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多