C#代码仅在使用调试器时有效

本文关键字:调试器 有效 代码 | 更新日期: 2023-09-27 18:00:44

这是我一直在使用的代码。这只是一个简单的程序,可以测试3个随机生成的数字是升序还是降序。出于某种原因,如果我使用调试器并进入每一行,那么代码就会正常工作。如果不是,那么它会说数字是100%有序的或100%无序的,但事实并非如此。

这是我一直在使用的代码:

        int num1;
        int num2;
        int num3;
        int yes = 0;
        int no = 0;
        for (int i = 0; i <= 99; i++)
        {
            Random rnd = new Random();
            num1 = rnd.Next(1, 11);
            num2 = rnd.Next(1, 11);
            num3 = rnd.Next(1, 11);
            if ( ((num1 <= num2) && (num2 <= num3)) || ((num1 >= num2) && (num2 >= num3)) )
            {
                yes += 1;
            }
            else
            {
                no += 1;
            }
        }

        Console.WriteLine("The Number are in ascending order " + yes.ToString() + " Times");
        Console.WriteLine("The Number are not in ascending order " + no.ToString() + " Times");
        Console.ReadLine();

我认为伪随机和代码每次生成相同的3个数字可能会有问题,但我仍在学习更多关于编程的知识,如果能提供其他帮助,我将不胜感激。

C#代码仅在使用调试器时有效

new Random()构造函数使用当前时间作为种子。

除非在调试器中等待,否则所有Random实例都具有相同的种子。

您应该使用一个实例。

这与如何生成随机数有关。

如果你服用

Random rnd = new Random();

并将其移出循环,您应该会看到所需的结果。

更多背景:

随机数生成器根据你实例化它的时间使用种子。因为你的代码运行得很快,所以种子是一样的,所以数字也是一样的。这就是为什么当你通过时它会起作用。

在循环外实例化Random将实例化一次,并使用随机算法生成新的数字。