【发布时间】:2010-10-13 05:23:38
【问题描述】:
我正在尝试生成两个随机数,一个用于一行,一个用于一列。
在这个确切的例子中,它是一个 4 行 4 列的多维数组。因此,数字生成器可以为行和列使用值 0 到 3。
我还必须确保没有重复的点,所以如果第一次选择[0,0],则不能再次使用[0,0]。
当我实施我的解决方案并打印出结果时,C# 需要 LONG 时间来生成一组工作数字。
例如,在这种情况下,我只寻找 16 个可能性中的 10 个数字,这就是输出的样子:
[1,1]
// {snip 26 times}
[3,3]
// {snip 76 times}
[0,0]
// {snip 83 times}
[2,2]
// {snip 69 times}
[0,0]
// {snip 84 times}
// {etc...}
[0,1] // which is a valid number
为什么它会连续 84 次找到 [0,0] 作为一组随机数?它不使用我系统的本地熵还是什么?
以下是相关代码:
private static void RandomlyAssignSeat(string name, string[,] seatingArray)
{
int row, col;
// loop until seat is not reserved, then reserve it
do
{
// generate random row
row = RandomNumber(0,seatingArray.GetLength(0));
// generate random column
col = RandomNumber(0,seatingArray.GetLength(1));
Console.WriteLine("[" + row + "," + col + "]");
} while (ReserveSeat(row, col, name, seatingArray) == false);
} // end method RandomlyAssignSeat
RandomNumber 看起来像这样:
private static int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
} // end method RandomNumber
我发现它被 90 条记录阻塞,最大数组为 16x6(或 96 条记录)
【问题讨论】:
-
我希望
ReserveSeat中没有竞争条件...
标签: c# random performance