我正在Visual Studio中为Windows窗体制作一个C#脚本 我需要获得非重复数字,这就是我在该脚本中尝试过的,当我编译项目时,我会得到这个随机数,但有时,这些数字是重复的,所以我想如果你告诉我的话我犯了哪个错误,或者即使错误出现在那段代码中 我需要存储从1到75的随机数来说明这些75是否创建了随机数,与我已经拥有的某些数字相等的表相比。
for (int i = 0; i < 76; i++)
{
auxiliar = random.Next(1, 75);
bool continuar = false;
while (!continuar)
{
for (int j = 0; j <= contador; j++)
{
if (auxiliar.ToString() == totalBalotas[j])
{
continuar = true;
j = contador;
}
}
if (continuar)
{
auxiliar = random.Next(1, 75);
devuelve = auxiliar.ToString();
continuar = false;
estaContando = true;
return devuelve;
}
else
{
continuar = true;
totalBalotas[contador] = auxiliar.ToString();
devuelve = auxiliar.ToString();
contador++;
estaContando = true;
return devuelve;
}
}
}
estaContando = true;
return devuelve;
}
答案 0 :(得分:-1)
你能说出产生非重复数字的目的是什么?这些数字应该是随机的吗?这些数字是否有界限?
我现在能想到的是使用Random来生成数字并将已使用的数字存储在集合中以避免重复。
以下是提供唯一随机数的类的示例。如果你需要它,你可以考虑使它静态和线程安全。
class NonDuplicateRandomNumbersGenerator
{
private Random r = new Random();
private ISet<int> usedNumbers = new HashSet<int>();
public int NonDuplicateRandomNumber()
{
var number = r.Next();
while (usedNumbers.Contains(number))
{
number = r.Next();
}
usedNumbers.Add(number);
return number;
}
}
答案 1 :(得分:-2)
我可以理解你要解释的内容,当生成随机数时,如果你想生成非重复的randoms,你必须与每个生成的数字已经生成的整个数字列表进行比较。