Random.Next没有给出随机数

Mul*_*der 7 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);
            }
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 21

制作randomListCell一个实例变量并只初始化一次 - 否则你将再次获得相同的数字.

来自MSDN:

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


Ben*_*igt 5

Random.Next(Int32)

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

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


小智 4

我建议也为随机数生成器播种。据我了解,每次运行应用程序时,您最终都会得到相同的伪随机数序列。我可能错了。

int Seed = (int)DateTime.Now.Ticks;
Random randomListCell = new Random(Seed);
Run Code Online (Sandbox Code Playgroud)

  • 这根本没有什么区别——这就是默认构造函数“new Random()”在内部所做的事情。关键是仅初始化“randomListCell”一次,然后在此实例上调用“Next()”。 (9认同)
  • “Random”创建一个伪随机数序列 - 对于相同的种子,该序列始终相同 - 因此,如果您想“重现”之前使用过的序列,通常会传递一个种子。 (2认同)