正确实施C#x27,;s随机数发生器
我试图生成两个随机数,一个用于行,一个用于列 在这个实例中,它是一个具有4行4列的多维数组。因此,数字生成器可以对行和列使用值0到3 我还必须确保没有重复点,因此如果第一次选择[0,0],则不能再次使用[0,0] 当我实现我的解决方案并打印结果时,C#需要很长时间才能生成一组工作的数字 例如,在本例中,我只寻找16种可能性中的10种,这就是输出结果:正确实施C#x27,;s随机数发生器,c#,random,performance,C#,Random,Performance,我试图生成两个随机数,一个用于行,一个用于列 在这个实例中,它是一个具有4行4列的多维数组。因此,数字生成器可以对行和列使用值0到3 我还必须确保没有重复点,因此如果第一次选择[0,0],则不能再次使用[0,0] 当我实现我的解决方案并打印结果时,C#需要很长时间才能生成一组工作的数字 例如,在本例中,我只寻找16种可能性中的10种,这就是输出结果: [1,1] // {snip 26 times} [3,3] // {snip 76 times} [0,0] // {snip 83 times
[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
随机数看起来是这样的:
private static int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
} // end method RandomNumber
我发现它被90条记录阻塞,最大数组为16x6(或96条记录)在
RandomlyAssignSeat
中创建一次RandomNumber
实例,并将其作为参数传递给RandomNumber
函数
要了解为什么应该这样做,请查看
randomlAssignSeat
中创建Random
实例的第一个示例,并将其作为参数传递给RandomNumber
函数
要了解为什么应该这样做,请查看位于的第一个示例,或者将随机实例设置为单例。您的RandomNumber方法的签名不会更改。或使随机实例成为单例。您的RandomNumber方法的签名不会更改。将RandomlyAssignSeat从使用我自己的自定义RandomNumber方法更改为运行'Random Random=new Random();'然后是“row=random.Next(0,seatingArray.GetLength(0));”和'col=random.Next(0,seatingArray.GetLength(1));'工作速度快得多。谢谢。将RandomlyAssignSeat从使用我自己的自定义RandomNumber方法更改为运行'Random Random=new Random();'然后是“row=random.Next(0,seatingArray.GetLength(0));”和'col=random.Next(0,seatingArray.GetLength(1));'工作速度快得多。谢谢。我希望
ReserveSeat
中没有比赛条件……我希望ReserveSeat
中没有比赛条件。。。