C# 获取唯一的号码

C# 获取唯一的号码,c#,random,numbers,unique,C#,Random,Numbers,Unique,对于学校,我需要用C语言做一个项目,随机问20个问题 我有一个包含问题和答案的文本文件 通过一些代码,我们将问题放在一个数组中。现在我们可以生成一个从0到19的数字。但每个问题只需出现1次 我们不能随意做第一件事,也不能按顺序做下一件事。每个问题都需要随机回答 我的荷兰语代码: public int randomVraagMaker() { int num; Random randNum = new Random(); num = ran

对于学校,我需要用C语言做一个项目,随机问20个问题

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

通过一些代码,我们将问题放在一个数组中。现在我们可以生成一个从0到19的数字。但每个问题只需出现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;

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

// 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-20的数字。 你可以这样做

掷骰子 如果这个号码还没用过,问这个问题并把它从名单上划掉 如果该号码已被使用,请再次滚动
我不会给你答案,因为这是家庭作业,但是,你要做的是创建一个整数列表:

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

我给你一个如何做的想法。实际上,您可能希望使用while循环不断获取一个随机数,直到得到一个不在列表中的随机数。

而不是获取一个随机数,然后获取该数字的问题,下面是我要做的

将所有问题放入一个数组中,然后随机化或无序排列该数组。这应该很容易做到。一旦你有了一个洗牌数组,它可能看起来像:

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

无论什么时候你需要答案,就选前面或下一个索引中的答案。每个问题都保证在那里出现一次,并且在完成数组时只有一次

如果你有具体的问题,这是问他们的地方。但是,我们不会为您做家庭作业。这里有一个提示:将问题列在一个列表中,然后随机排列列表的顺序。或者,当您选择随机问题时,将其从列表中删除。但要确保你的下一个随机数只会出现在列表的长度上。可能会重复你认为需要的步骤,看看你真正想做什么。您希望以随机顺序获得一组20个问题,并且没有重复的问题。这就是洗牌。由@Silvermind链接的答案告诉你如何在C中进行洗牌。嘿,这就是我现在基本上拥有的。但是由于某些原因,如果{u usedNumbers.ContainsmyRandomNumber{myRandomNumber=randNum.Next0,19;}或者{return myRandomNumber}u usedNumbers.addmyRandomNumber}我知道这通常需要工作,但是如果它在列表中,你不会选择一个新的随机数,但是,如果您选择的新随机数也在列表中,该怎么办?你又查了吗?再说一遍?它需要处于一个while循环中。类似于_usedNumbers.ContainsmyRandomNumber{myRandomNumber=randNum.Next0,19;}确保所有问题都被问完后,你就停止了。否则你将创建一个无休止的循环。是的,这已经解决了:D和一个基本计数器嘿,哈哈哈,我确实用代码allready填写了8篇论文,我真的很困惑。嘿,我如何才能得到一个返回的int?@user3574537同样的方法-只需构建int列表,然后从集合中返回int。我将编辑以显示如何使其适用于任何列表
18, 4, 6, 19, 1, [...]