0

我已经搜索了几个小时,但我没有得到它。我似乎不知道如何使用 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

4 回答 4

1

您是否只是试图以排列顺序返回从 min 到 max 的所有整数?这是我想要在给定范围内的随机整数序列以保证每个随机数都是唯一的唯一方法......

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

于 2013-02-21T06:38:58.927 回答
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
                            }
                        }


                    }
                }
            }
        }
    }
于 2013-02-21T06:37:38.933 回答
0

仅将 Random 类实例化一次。

private Random random = new Random();

private int RandomNumber(int min, int max)
{
    var result = this.random.Next(min, max);
    return result;
}
于 2013-02-21T07:51:43.690 回答
-1

尝试将 Random 类实例的声明放在函数之外,以便每次都可以获得不同的数字,如果你想确保随机数不会被重复,你可以使用 List 来存储每个生成的数字

class Classname
{
private Random random = new Random();
//your code
}
于 2013-02-21T06:43:08.977 回答