获取一个唯一的号码

时间:2014-04-25 21:12:29

标签: c# random numbers unique

对于学校,我需要在C#中制作一个项目,随机提出20个问题。

我有一个包含答案问题的文本文件。

通过一些代码,我们将问题放在一个数组中。现在我们可以生成0到19之间的数字(20个问题)。但每个问题只需要出现1次和1次。

我们不能随意和下一个按顺序完成第一个。每个问题都需要随意。

我的代码(荷兰语):

public int randomVraagMaker()
    {

        int num;
        Random randNum = new Random();
        num = randNum.Next(0, 19);
        for (int i = 0; i < lijst.Count; i++) 
        {
            if (num == lijst[i])
            {
                num = randNum.Next(0, 19);
            }
            else
                lijst.Add(num);

        }
        vraag = num * 7;
        return vraag;

4 个答案:

答案 0 :(得分:2)

您可以建立所有问题的列表,然后随机删除您想要提出的问题:

// Using a List<string> questions or List<int> of indices

T RemoveSingleQuestion<T>(List<T> questions, Random random)
{
     // TODO: Add validation (ie: questions is not null, has at least 1 element, etc)
     int index = random.Next(questions.Count);
     T question = questions[index];
     questions.RemoveAt(index);
     return question;
}

通过这种方式,您可以构建列表(包含任意数量的问题),并在您离开时删除您提出的问题。

答案 1 :(得分:1)

我不会给你答案,因为它是家庭作业,但是,你要做的是创建一个整数列表:

List<int> _usedNumbers = new List<int>();

然后生成每个随机数,将其添加到列表中。最后,在选择随机数后,检查它是否在您的列表中:

if (_usedNumbers.Contains(myRandomNumber))
{
    // Number is not unique. Try generating another random number
} else {
    // Number IS unique!
}

我告诉你如何做到这一点。实际上,您可能希望使用while循环来获取随机数,直到您得到一个不在列表中的数字。

答案 2 :(得分:0)

我不打算为你做功课,但也许可以尝试用一张纸和一个骰子来解决这个问题。 你可能会这样做

  1. 掷骰子
  2. 如果未使用该号码,请提出问题并将其从列表中删除
  3. 如果已使用该号码再次滚动

答案 3 :(得分:0)

而不是得到一个随机数,然后得到这个数字的问题,这就是我要做的......

将所有问题放在一个数组中,然后随机化(或随机)数组。这应该很容易做到。一旦你有一个洗牌数组,可能看起来像:

18, 4, 6, 19, 1, [...] 

每当你需要一个答案时,取一个前面的那个(或下一个索引)。每个问题都保证在你完成阵列时只在那里一次。