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