C# - 返回一个唯一的随机数

时间:2013-02-21 06:34:31

标签: c#

我已经搜索了几个小时,但我没有得到它。我似乎不知道如何使用Fisher-Yates返回值以及列出的许多方法。我快死了。

我可以获得一个RandomNumber,但这一遍又一遍地重复使用。每次返回时我都需要它是唯一的(或者我倾向于认为是可能的)。

我需要帮助,了解我应该做什么,每个部分为什么做,以及傻瓜的东西。这是有效的:

    private int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

这就是我所说的并且它正在工作(但不是使用独特的随机数)......我只包括我认为需要被看到的东西以及它的位置:

  private void ComputersTurn()
    {
        Control.ControlCollection coll = this.Controls;
        foreach (Control c in coll)
        {
            if (...)
            {
                if (...)
                {

                    if (...)
                    {
                        if ((c.Name == "btn" + Convert.ToString(RandomNumber(1,9)) && (c.Enabled != false) )) 
                        {
                            if (...)
                            {
                                //code here
                            }
                        }


                    }
                }
            }
        }
    }

同样,RandomNumber有效......但它不是唯一的。我想学习如何返回一个唯一的数字(如果可能的话)。

4 个答案:

答案 0 :(得分:1)

您是否只是尝试将所有整数从最小值返回到最大值并将其顺序置换?对于我来说,在给定范围内想要一系列随机整数是唯一的方法,这样每个随机都可以保证唯一...

假设我是正确的,你应该能够轻松找到数组随机排列的代码。

答案 1 :(得分:0)

Random生成唯一数字的唯一方法是在类中定义它,如下所示:

public static class RandomGenerator
{
    private static readonly Random _random = new Random();

    public static int GenRand(int x, int y)
    {
        return _random.Next(x, y);
    }
}

在您的情况下,尝试以这种方式使用此代码:

private void ComputersTurn()
    {
        Control.ControlCollection coll = this.Controls;
        foreach (Control c in coll)
        {
            if (...)
            {
                if (...)
                {

                    if (...)
                    {
                        if ((c.Name == "btn" + Convert.ToString(RandomGenerator.GenRand(1, 9)) && (c.Enabled != false) )) 
                        {
                            if (...)
                            {
                                // code here
                            }
                        }


                    }
                }
            }
        }
    }

答案 2 :(得分:0)

仅实例化一次Random类。

private Random random = new Random();

private int RandomNumber(int min, int max)
{
    var result = this.random.Next(min, max);
    return result;
}

答案 3 :(得分:-1)

尝试将Random类实例的声明放在函数外部,这样如果你想确保随机数不会重复,你可以得到每个不同的数字你可以使用和List来存储每个生成的号码

class Classname
{
private Random random = new Random();
//your code
}