我正在尝试生成两个随机数,一个用于行,一个用于列。
在这个确切的实例中,它是一个包含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条记录)
答案 0 :(得分:4)
在Random
中创建一次RandomlyAssignSeat
个实例,并将其作为参数传递给RandomNumber
函数。
要了解您应该这样做的原因 - 请查看http://msdn.microsoft.com/en-us/library/system.random.aspx
处的第一个示例答案 1 :(得分:0)
或使Random实例成为单例。 RandomNumber方法的签名不会改变。