我试图产生两个随机数,一个为一行,一个为列。正确实施C#的随机数生成器
在这个确切的实例中,它是一个具有4行和4列的多维数组。因此,数字生成器可以使用行和列的值0到3。
我还必须确保没有重复的点,所以如果第一次选择[0,0],则不能再次使用[0,0]。
当我实施我的解决方案并打印出结果时,C#需要一个LONG时间来生成一组工作的数字。
举例来说,我只是在寻找10个号码的开出在这种情况下,16种可能性,这是输出是什么样子:
[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
为什么找到[0,0]作为一组随机数字连续84次?它不使用我的系统的本地熵或什么?
下面是相关代码:
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
我发现它被特别是16x6的最大阵列(或96个记录哽咽了90条记录)
我希望在'ReserveSeat'中没有竞赛条件... – icktoofay 2010-10-14 00:48:21