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

时间:2015-07-01 16:06:59

标签: 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();

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

2 个答案:

答案 0 :(得分:9)

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

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

您应该使用单个实例。

答案 1 :(得分:6)

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

如果你选择

Random rnd = new Random();

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

更多背景资料:

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

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