“new Random(x)”总是生成相同的数字?

我想获得一个唯一的随机数,但每次运行代码时我都会得到相同的数字。 我将首先得到14然后6但我保留所有使用的数字的列表似乎不起作用。添加14手动工作,但当我添加randInt它不起作用。

const int numCards = 32; List usedCards = new List(); int randInt = 0; Random rand = new Random(numCards); usedCards.Add(14); do { randInt = rand.Next(0, numCards); MessageBox.Show(randInt.ToString(), "End Game", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } while (usedCards.Contains(randInt)); usedCards.Add(randInt); 

更换:

 Random rand = new Random(numCards); 

 Random rand = new Random(); 

Random构造函数调用中提供固定的种子值( numCards总是具有相同的值)将产生可预测的 重现的序列,对于相同的种子值,它总是相同的,就像这样(不完全但仍然有效) :

在此处输入图像描述

例如,使用固定种子1并绘制10个数字,范围从0到100,在我的机器上始终生成序列

 24,11,46,77,65,43,35,94,10,64 

另一方面,不使用种子值,序列变得不可预测。

如果没有传入种子值, Random将根据当前时间生成一个新的种子值,这就是你想要获得一个新的随机数序列 – 只要你不按快速顺序再次初始化它,这就是你应该重新开始的原因。 -use Random实例,而不是每次都重新创建它们。

随机类

如果为Random类构造函数指定种子值,则每次都会生成相同的序列。 产生随机数序列的算法是确定性的。

如果使用不带参数的构造函数,则Random对象将在当前时间使用种子值,因此使用此构造函数实例化的每个Random对象将具有不同的随机数序列,只要时间种子值可能不同即可。

如果它们在彼此非常接近的时间内初始化,您仍然可以从两个不同的Random对象获得相同的数字序列。

随机构造函数