Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确实施C#x27,;s随机数发生器_C#_Random_Performance - Fatal编程技术网

正确实施C#x27,;s随机数发生器

正确实施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

我试图生成两个随机数,一个用于行,一个用于列

在这个实例中,它是一个具有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}
[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
中没有比赛条件。。。