【发布时间】:2013-12-24 21:55:47
【问题描述】:
我正在尝试创建一个介于 1 到 10 之间的非重复随机数范围,我计划通过将我生成的每个随机数存储到一个数组中来执行此操作,然后每次检查该数组以确保我不是号码已经用过了。
我的问题是,我没有创建不同的随机数,例如 1、2、3,而是一遍又一遍地获取相同的随机数。
randomNumber();
Label1.Text = randomRow + "";
randomNumber();
Label2.Text = randomRow + "";
randomNumber();
Label3.Text = randomRow + "";
public int randomNumber()
{
List<int> numbers = new List<int>();
int num = 0;
Random randNum = new Random();
num = randNum.Next(1, 11);
if (numbers.Contains(num))
{
num = randNum.Next(1, 11);
}
else
{
randomRow = num;
numbers.Add(num);
}
return randomRow;
}
【问题讨论】:
-
您需要播种随机数:例如 Randomd rnd = new Random(DateTime.Now.Millisecond)
-
不要每次都创建一个新的 Random 实例。创建一次并将其保存在字段中。
-
另外,
numbers列表只存在于randomNumber()内部,并且每个调用都有“自己的”列表。你确定这是你想要的吗?另一件事:如果生成的随机数已经存在,您只会生成一个新的随机数。你不检查新生成的。 -
不是对您的问题的解释,但您可能想考虑只创建一个从 1 到 10 的新数组并改组它。这样,您将以随机顺序获得 1-10 中的所有数字,这与您尝试做的一样;
var random = new Random(); var array = Enumerable.Range(1, 10).OrderBy(x => random.NextDouble()).ToArray();