非重复数字

时间:2018-05-23 16:46:25

标签: c# windows-forms-designer

我正在Visual Studio中为Windows窗体制作一个C#脚本 我需要获得非重复数字,这就是我在该脚本中尝试过的,当我编译项目时,我会得到这个随机数,但有时,这些数字是重复的,所以我想如果你告诉我的话我犯了哪个错误,或者即使错误出现在那段代码中 我需要存储从1到75的随机数来说明这些75是否创建了随机数,与我已经拥有的某些数字相等的表相比。

        for (int i = 0; i < 76; i++)
        {
            auxiliar = random.Next(1, 75);
            bool continuar = false;

            while (!continuar)
            {
                for (int j = 0; j <= contador; j++)
                {
                    if (auxiliar.ToString() == totalBalotas[j])
                    {
                        continuar = true;
                        j = contador;
                    }
                }
                if (continuar)
                {
                    auxiliar = random.Next(1, 75);
                    devuelve = auxiliar.ToString();
                    continuar = false;
                    estaContando = true;
                    return devuelve;
                }
                else
                {
                    continuar = true;
                    totalBalotas[contador] = auxiliar.ToString();
                    devuelve = auxiliar.ToString();
                    contador++;
                    estaContando = true;
                    return devuelve;
                }
            }
        }
        estaContando = true;
        return devuelve;
    }

这是代码 https://i.stack.imgur.com/D7wqk.png

2 个答案:

答案 0 :(得分:-1)

你能说出产生非重复数字的目的是什么?这些数字应该是随机的吗?这些数字是否有界限?

我现在能想到的是使用Random来生成数字并将已使用的数字存储在集合中以避免重复。

以下是提供唯一随机数的类的示例。如果你需要它,你可以考虑使它静态和线程安全。

class NonDuplicateRandomNumbersGenerator
{
    private Random r = new Random();
    private ISet<int> usedNumbers = new HashSet<int>();

    public int NonDuplicateRandomNumber()
    {
        var number = r.Next();

        while (usedNumbers.Contains(number))
        {
            number = r.Next();
        }

        usedNumbers.Add(number);
        return number;
    }
}

答案 1 :(得分:-2)

我可以理解你要解释的内容,当生成随机数时,如果你想生成非重复的randoms,你必须与每个生成的数字已经生成的整个数字列表进行比较。