随机(种子).nextInt始终为生成的第一个数字生成0

时间:2017-02-13 17:26:12

标签: java

这是我的代码:

import java.util.*;
public class RandGen 
{
    Random rd;
    static final int SIZE = 1;
    int[] result = new int[SIZE];
    public RandGen(int seed)
    {
        rd = new Random(seed);
        for(int i=0;i<SIZE-1;i++)
        {
            result[i] = rd.nextInt((int) Math.pow(10,9)+1);
        }
    }
}

您可以更改SIZE常量以获得更大的数组大小,但Random rd.nextInt将始终生成第一个数字为0。

3 个答案:

答案 0 :(得分:7)

问题在于你的for循环,你的逻辑测试基本上说&#34;只要0小于0&#34;增量iSIZE为1,您将SIZE-1等于0。

编辑正如 T.J所述。下面是Crowder JB Nizet for循环从不设置数组中最后一个元素的值,因为它只会运行SIZE-1元素,并且永远不会输入循环。

答案 1 :(得分:2)

我在这里看到两个问题:

  1. 作为另一个答案的概述,你的循环条件是一个&#34;关闭一个&#34 ;;在当前版本中,该循环从不输入;因此,阵列只是与它保持一致&#34; initial&#34;值(全零)
  2. 当你一直使用相同的种子调用代码时,那么......就没有&#34;随机性&#34;在那里。然后序列将始终相同。这是使用种子的重点!

答案 2 :(得分:0)

如果您使用的是大小为SIZE的数组,则其位置位于0..SIZE-1区间。然后,要遍历数组中的所有值,for循环应为for(int i=0;i<SIZE;i++){}。由于int i=0;i<SIZE-1SIZE等于1,程序永远不会进入for循环。如果您有一个更大的SIZE,for循环将永远不会触及数组的最后一个索引。