Random.Next没有给出随机数

时间:2011-03-27 00:46:49

标签: c# random

您好
这是我如何使用随机但它总是给indexOfAChosenListCell提供“1”索引 当我调试它时会显示不同的值,但是在常规运行中我每次都会得到相同的动作。
Random有什么问题,它是静态的而不是随机的......:)

internal Square getAutomaticMove()                      
{
            List<Square> LegalMovesArray = GetLegalSquares();
            Random randomListCell = new Random();
            int indexOfAChosenListCell = 0;

            if (CheckForLegalSquares())    
            {
                 indexOfAChosenListCell = randomListCell.Next(LegalMovesArray.Count-1);
            }

8 个答案:

答案 0 :(得分:21)

使randomListCell成为实例变量并仅将其初始化一次 - 否则您将再次获得相同的数字。

来自MSDN

  

默认情况下,无参数   Random类的构造函数使用   系统时钟生成其种子   值,而参数化   构造函数可以采用Int32值   根据蜱的数量   当前时间。   但是,因为时钟具有有限的分辨率,所以使用无参数构造函数来创建   紧密连续的不同随机对象会创建随机数    生成相同的生成器    随机数序列。

答案 1 :(得分:5)

Random.Next(Int32)

  

返回非负的随机数小于指定的最大值

所以你得到的最大数字是Count - 2,可能不是你想要的。

答案 2 :(得分:4)

将Random声明为私有成员变量,然后将其实例化为构造函数,并仅在方法中调用Random.Next。

答案 3 :(得分:4)

我建议播种随机数字发生器。据我所知,每次运行应用程序时,最终都会得到相同的伪随机数序列。我可能弄错了。

int Seed = (int)DateTime.Now.Ticks;
Random randomListCell = new Random(Seed);

答案 4 :(得分:3)

你的随机应该在函数之外创建

Random randomListCell = new Random();

internal Square getAutomaticMove()                      
{
            List<Square> LegalMovesArray = GetLegalSquares();
            int indexOfAChosenListCell = 0;

            if (CheckForLegalSquares())    
            {
                 indexOfAChosenListCell = randomListCell.Next(LegalMovesArray.Count-1);
            }

答案 5 :(得分:3)

每次需要新号码时都不要创建新的随机数;如果你想要一系列不同的随机数,你想保留一个随机对象并反复询问它们。

答案 6 :(得分:2)

我会说明差异:

var random = new Random();
var color = Color.FromArgb(200, random.Next(255), // 222
                                random.Next(255), // 33
                                random.Next(255)); // 147

结果:#DE2193

var color = Color.FromArgb(200, new Random().Next(255), // 153
                                new Random().Next(255), // 153
                                new Random().Next(255)); // 153

结果:#999999

答案 7 :(得分:0)

声明函数外部的Random对象,以便它使用相同的对象生成新的数字。您每次使用相同的种子创建新对象并为您提供大多数相同的数字...

static Random randomListCell = new Random();
internal Square getAutomaticMove()                      
{
            List<Square> LegalMovesArray = GetLegalSquares();

            int indexOfAChosenListCell = 0;

            if (CheckForLegalSquares())    
            {
                 indexOfAChosenListCell = randomListCell.Next(LegalMovesArray.Count-1);
            }
}