对于学校,我需要在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;
答案 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)
我不打算为你做功课,但也许可以尝试用一张纸和一个骰子来解决这个问题。 你可能会这样做
答案 3 :(得分:0)
而不是得到一个随机数,然后得到这个数字的问题,这就是我要做的......
将所有问题放在一个数组中,然后随机化(或随机)数组。这应该很容易做到。一旦你有一个洗牌数组,可能看起来像:
18, 4, 6, 19, 1, [...]
每当你需要一个答案时,取一个前面的那个(或下一个索引)。每个问题都保证在你完成阵列时只在那里一次。