【问题标题】:How do I generate unique random numbers in c# [duplicate]如何在c#中生成唯一的随机数[重复]
【发布时间】:2018-02-24 21:50:27
【问题描述】:

大家好,我正在创建一个名为 Quiz 游戏的程序。现在我的问题是如何生成不重复的问题?我所有的问题都存储在 switch 语句中。我已经尝试并搜索了所有可能的解决方案,但仍然得到相同的输出。我下面的代码只是一个示例,我没有将其全部粘贴,因为它太长了。每当我调用 Question() 方法时,它都是随机的,但有时已经问过的问题会再次被问到。

    public void Question()
    {

     var random = new Random((int)DateTime.Now.Ticks);
        var randomValue = random.Next(1, 8);
        switch (randomValue)
        {
            case 1:
     ans = 1;

                    btnA.Visible = true;
                    btnB.Visible = true;
                    btnC.Visible = true;
                    btnD.Visible = true;
                    btn50.Enabled = true;
                    btndoubledip.Enabled = true;

                    lblQuestion.Text = "1+1=?";
                    voice = new SpeechSynthesizer();
                    voice.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Child);
                    voice.SpeakAsync(lblQuestion.Text.ToString());

                    btnA.Text = "2";
                    btnB.Text = "1";
                    btnC.Text = "4";
                    btnD.Text = "5";


                }
                break;

【问题讨论】:

  • 我什至不认为你发布的代码会编译。
  • 你真的以错误的方式思考这个问题。首先不要使用 switch 语句 - 将您的问题保留在 List 中,随机排序列表(在 Stack Overflow 上有很多方法可以做到这一点),然后按照新顺序进行处理。
  • 您将需要以某种方式存储已经提出的问题列表。或者存储问题列表并从中删除项目,然后再选择另一个问题。
  • @maccettura 它只是一个示例,我只是粘贴了我的名为 Question() 的方法
  • @DavidG 但是可以把它放在像我的 public void Question() 这样的方法中吗?

标签: c# random


【解决方案1】:

使用Randomize a List<T> 随机播放列表。所以:

private static Random rng = new Random(); 
public static void Shuffle<T>(this IList<T> list) 
{ 
    int n = list.Count; 
    while (n > 1)
    {
          n--;
          int k = rng.Next(n + 1);
          T value = list[k]; 
          list[k] = list[n]; 
          list[n] = value; 
     } 
}

然后只需随机排列您的问题列表并从头到尾显示它们。

List<Question> questions = new List<Question>()
{
    question1, 
    question2, 
    question3
    //... 
}
questions.Shuffle();
foreach (Question question in questions) question.Ask();

【讨论】:

  • Fisher-Yates 随机播放,以防有人想了解更多有关该算法的信息,它非常酷!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多