不希望随机数显示两次

时间:2014-03-18 20:13:57

标签: c# shuffle

我想在列表中保存随机数,相同的数字不能两次。 这是一个BINGO游戏,此方法用于显示前B12,然后用户点击进入并显示一个新数字。这将一直持续到用户写q。

这样可行,但数字可以显示两次......

static void bingo()
{
    Random rnd =new Random();
    List<int> check = new List<int>();
    string choice = "";

    while (choice != "Q")
    {
        int number = rnd.Next(1, 76);

        while (!check.Contains(number))
        { 
            kontroll.Add(number); 
        }
        if (number <=15)
        {
            choice = Interaction.InputBox("B" + number);
            choice = choice.ToUpper();
        }
        else if(number <= 30)

        etc.

3 个答案:

答案 0 :(得分:2)

这样的事情应该有用(如果我正确地阅读你的问题)

Enumerable.Range(1,76).OrderBy(n =&gt; rnd.NextDouble())

答案 1 :(得分:0)

有几种方法可以做到这一点:

  1. 跟踪“被叫”的号码 - 如果列表中有一个号码,请选择另一个号码
  2. 删除从原始列表中调用的号码,然后每次随机选择一个新号码。
  3. 按随机数对可能值列表进行排序,然后按列表
  4. 进行排序

答案 2 :(得分:-1)

实现此目的的最简单方法是使用HashSet

var usedNumbers = new HashSet<int>();
...
int number;
do {
    number = rnd.Next(1, 76);
} while (usedNumbers.Contains(number));
usedNumbers.Add(number);