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有效。。。但它并不是独一无二的。我想学习如何返回一个唯一的数字(如果可能的话)。
您只是想用排列的顺序返回从最小到最大的所有整数吗?这是我唯一有意义的方法,想要一个给定范围内的随机整数序列,这样每个随机数都是唯一的。。。
假设我是正确的,您应该能够很容易地找到数组随机排列的代码。
通过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
}