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

本文关键字:一个 唯一 随机数 返回 C#- | 更新日期: 2023-09-27 18:00:25

我已经搜索了几个小时,但没有得到它。我似乎不知道如何使用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有效。。。但它并不是独一无二的。我想学习如何返回一个唯一的数字(如果可能的话)。

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

您只是想用排列的顺序返回从最小到最大的所有整数吗?这是我唯一有意义的方法,想要一个给定范围内的随机整数序列,这样每个随机数都是唯一的。。。

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

通过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
                            }
                        }

                    }
                }
            }
        }
    }

只实例化Random类一次。

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

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

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