这个问题在这里已有答案:
我正在创建一个函数来生成一个随机数组而不是重复数字。我做错了什么?
使用此代码,函数填充数组重复一些数字。
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;
}
如果你随机滚动一个重复的数字,然后滚动一个新的数字,并随机滚动estratti[0]
似乎会出现问题。当您找到重复时设置j=0
,但下次检查numero==estratti[j]
是否在循环的下一次迭代中。到那时,j
已经增加了j++
到1
,因此你错过了这个案例。
要修复它,如果找到重复的数字,可以设置j = -1
。
您应该利用一个hashset结构并执行类似这个未经测试的java代码:
HashSet set = new LinkedHashSet();
while (set.size() < n) {
set.add(random.nextInt(delta));
}
return set.toArray();
如果已经存在,HashSet.add
method将不会添加值。
根据您的情况调整该代码。