我想获得一个独特的随机数,但每次运行代码时我都会得到相同的数字.我会先得到14然后6但我的列表中保存所有使用的数字似乎不起作用.添加14手动工作,但当我添加randInt它不起作用.
const int numCards = 32;
List<int> usedCards = new List<int>();
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);
Run Code Online (Sandbox Code Playgroud)
Bro*_*ass 17
更换:
Random rand = new Random(numCards);
Run Code Online (Sandbox Code Playgroud)
同
Random rand = new Random();
Run Code Online (Sandbox Code Playgroud)
在构造函数调用中提供固定的种子值(numCards总是具有相同的值)将产生可预测的,可重现的序列,对于相同的种子值,它总是相同的,就像这样(不完全但仍然有效):Random

例如,使用固定种子1并绘制10个数字,范围从0到100,在我的机器上始终生成序列
24,11,46,77,65,43,35,94,10,64
Run Code Online (Sandbox Code Playgroud)
另一方面,不使用种子值,序列变得不可预测.
如果没有传入种子值,Random 将根据当前时间生成一个新的种子值,这就是你想要获得一个新的随机数序列 - 只要你不按快速顺序再次初始化它,这就是为什么你应该重新使用Random实例而不是每次都重新创建它们.