用于生成无重复的随机数数组的函数

时间:2019-01-16 20:12:29

标签: java arrays random

我正在创建一个函数来生成随机且不重复的数字。我在做什么错了?

使用此代码,该函数填充重复一些数字的数组。

for(int i=0;i<n;i++)
        {
          numero = random.nextInt(delta) + da;
          for(int j=0;j<n;j++)
          {
            if(numero==estratti[j])
            {
              numero = random.nextInt(delta) + da;
              j=0;
            }        
          }
          estratti[i] = numero;
        }

2 个答案:

答案 0 :(得分:2)

如果随机滚动一个重复的数字,然后滚动一个新的数字,然后随机滚动estratti[0],似乎会出现问题。找到重复项时设置j=0,但是下次检查numero==estratti[j]是否在循环的下一次迭代中。到那时,j已从j++增至1,因此您错过了这种情况。

要解决此问题,如果发现重复的数字,可以设置j = -1

答案 1 :(得分:0)

您应该利用哈希集结构并执行以下未经测试的Java代码:

HashSet set = new LinkedHashSet();
while (set.size() < n) {
    set.add(random.nextInt(delta));
}
return set.toArray();

HashSet.add method将不会添加任何值。

使代码适合您的情况。