【问题标题】:function for generating no-repeat numbers c# [duplicate]用于生成不重复数字的函数c# [重复]
【发布时间】:2017-11-27 10:31:51
【问题描述】:

我尝试编写一个函数来生成从 1 到 80 的数字,并且不重复。

问题是我的生成器工作不正常,因为存在重复。

public void generator() // сделать по кнопке, но пока что проверка тип на работоспособность 
    {
        Random rand = new Random();

        int[] arr = new int[20];
        int temp = 0;
        foreach (TextBox c in panel1.Controls)
        {
            for (int i = 0; i < 20; i++)
            {
                arr[i] = rand.Next(1, 80);
                temp = arr[i];
                for (int j = 0; j < i; j++)
                {
                    while (arr[i] == arr[j])
                    {
                        arr[i] = rand.Next(1, 80);
                        j = 0;
                        temp = arr[i];
                    }
                    temp = arr[i];
                }
                c.Text = arr[i].ToString();
            }

        }

    }

我尝试使用this solution,但我不明白如何从那里的List 获取数字。

请帮帮我

【问题讨论】:

  • 我认为洗牌更容易[1, 2, 3, 4, 5, ..., 80]
  • 什么“链接”?它没有任何称为 Link 的变量
  • 在维基百科和本网站上查找 Fisher-Yates shuffle。
  • @BugFinder 操作,已编辑

标签: c# random


【解决方案1】:

生成少量随机数的更一致的方法是从 1 到 80 列出一个列表,然后从列表中随机抽取 20 个项目。

Fisher-Yates shuffle

【讨论】:

    【解决方案2】:

    另一种避免重复值的方法是使用“HashSet”对象。它允许您创建不同值的列表。 您可以将 HashSet 对象用于随机数,然后您可以扫描这些项目并将其填充到任何您需要的地方。 HashSet 唯一的问题是它没有任何索引,所以我们必须将它转换为 List 对象。

    您可以在下面找到一个示例:

            var random = new Random();
            HashSet<int> containerSet = new HashSet<int>();
            do
            {
                containerSet.Add(random.Next(1, 80));
    
            } while (containerSet.Count < 20);
    
            var position = 0;
            var containerList = containerSet.ToList();
            foreach (TextBox c in panel1.Controls)
            {
                c.Text = containerList[position++];
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 2016-05-05
      相关资源
      最近更新 更多