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

vur*_*hd1 5 c# random

所以这是我一直在使用的代码.它只是一个简单的程序来测试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();
Run Code Online (Sandbox Code Playgroud)

我认为这可能是伪随机问题和每次生成相同的3个数字的代码,但我仍然在学习更多关于编程和其他帮助将非常感激.

SLa*_*aks 9

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

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

您应该使用单个实例.


opp*_*sum 6

这与随机数的生成方式有关.

如果你采取

Random rnd = new Random();
Run Code Online (Sandbox Code Playgroud)

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

更多背景:

随机数生成器根据您实例化它的时间使用种子.因为您的代码运行得如此之快,所以种子是相同的,所以数字是相同的.这就是为什么当你单步执行时它的工作原理.

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