给五个物体随机一个唯一的数字
本文关键字:一个 唯一 数字 五个 随机 | 更新日期: 2023-09-27 17:54:01
我一直在寻找我的问题的答案,但我找不到任何解决方案。我编写了一个程序,其中用户输入五名学生的姓名、姓氏和社会号码。完成后,用户输入的五个学生将得到一个随机数字。但问题是,两个学生不能有相同的随机数。我知道1-10000的机会很低,但这是我的任务。
这是我的代码,我试图解决这个问题,但我不能让它工作。
while (antal != ggr)
{
string name = Interaction.InputBox("Write name: ");
string lastname = Interaction.InputBox("Write last name: ");
string socialnr = Interaction.InputBox("Write social number: ");
while (a != false)
{
foreach (int item in uniqNum)
{
if (item == _rnd)
{
a = true;
}
else
{
_rnd = rnd.Next(1, 10000);
uniqNum.Add(_rnd);
a = false;
}
}
}
ggr++;
_Studens.Add(new student(name, lastname, socialnr, _rnd));
}
生成一个包含您希望从中选择的所有随机数的列表。然后,从该列表中随机选择一个索引,将得到的数字添加到另一个单独的列表中,并从所有数字列表中删除索引元素。
这将适用于较小范围的数字。如果希望在较大范围内获得唯一的随机数,则此方法可能不合适。在这种情况下,请考虑生成guid并将其转换为128位数字表示形式。
var allNumbers = Enumerable.Range(1, 10000).ToList();
var randomNumbers = new List<int>();
var random = new Random();
const int studentCount = 5;
for (int i = 0; i < studentCount; i++)
{
int randomIndex = random.Next(0, allNumbers.Count);
randomNumbers.Add(allNumbers[randomIndex]);
allNumbers.RemoveAt(randomIndex);
}
如果先生成数字,然后使用Contains()方法检查该数字是否已经存在呢?如果是,则重新生成该数字。像这样:
int number = 0;
List<int> numberArray = new List<int>();
while (true)
{
Random r = new Random();
number = r.Next(1, 1000);
if (!numberArray.Contains(number))
{
break;
}
}
Random r = new Random();
Enumerable.Range(1,10000).OrderBy(n => r.Next()).Take(5);