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个数字可能会有问题,但我仍在学习更多关于编程的知识,如果能提供其他帮助,我将不胜感激。
new Random()
构造函数使用当前时间作为种子。
除非在调试器中等待,否则所有Random
实例都具有相同的种子。
您应该使用一个实例。
这与如何生成随机数有关。
如果你服用
Random rnd = new Random();
并将其移出循环,您应该会看到所需的结果。
更多背景:
随机数生成器根据你实例化它的时间使用种子。因为你的代码运行得很快,所以种子是一样的,所以数字也是一样的。这就是为什么当你通过时它会起作用。
在循环外实例化Random将实例化一次,并使用随机算法生成新的数字。