我正在创建一个函数来生成随机且不重复的数字。我在做什么错了?
使用此代码,该函数填充重复一些数字的数组。
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;
}
答案 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将不会添加任何值。
使代码适合您的情况。