gpt4 book ai didi

c# - 调试时有效,运行时失败?

转载 作者:行者123 更新时间:2023-12-02 13:49:37 24 4
gpt4 key购买 nike

对于一些类(class),我需要通过暴力生成一个普通的幻方,这是代码的一部分。供引用;除了常用的类之外​​,我不允许使用任何类。 (我可能正在用 Math.Pow 碰碰运气)

我有以下方法来生成大小为 NxN 的二维:

    static int[,] GenerateSquare(int n)
{
int[,] sqarray = new int[n,n];
int[] rndarray = new int[n];

//puts completely random integers from 1 to n^2 in all elements of the square array (sqarray)
for (int i = 0; i < n; i++)
{
rndarray = FullRndArray(n);

for (int j = 0; j < n; j++)
{
sqarray[i, j] = rndarray[j];
}
}

return sqarray;
}

FullRndArray() 方法如下:

static int[] FullRndArray(int n)
{
//creates an array of size n and fills with random intigers between 1 and n^2
int[] rndarray = new int[n];
Random rnd = new Random();

int ntothe2 = Convert.ToInt32(Math.Pow(n, 2));

for (int i = 0; i < n; i++)
rndarray[i] = rnd.Next(1, ntothe2 + 1);

return rndarray;
}

问题是,当我运行此代码时,每行的内容是随机的,但正方形的每一行与最后一行相同(即 1-1、1-2、1-3 与2-1、2-2、2-3分别与3-1、3-2、3-3相同)。然而,当我逐行通过调试器时,我最终在每个空间中得到一组完全随机的数字。谁能给我解释一下这个错误吗?

最佳答案

罪魁祸首是:

Random rnd = new Random();

随机数是从种子开始生成的:相同的种子意味着相同的不那么随机的数字序列Random 使用当前时间作为种子,因此当您运行代码时,它运行得非常快,以至于您使用相同的种子创建两个 Random,然后生成两个相同的行。另一方面,当您进行调试时,您留出了足够的时间,一切都会按预期进行。
解决方案是创建一个静态的 Random 实例或在 GenerateSquare 的开头创建一个实例,并在整个过程中使用该实例。

关于c# - 调试时有效,运行时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21267077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com