给五个物体随机一个唯一的数字

本文关键字:一个 唯一 数字 五个 随机 | 更新日期: 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);