所以这是我一直在使用的代码。它只是一个简单的程序来测试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个数字的代码可能是一个问题,但我仍然在学习更多关于编程的知识,其他帮助将不胜感激。
答案 0 :(得分:9)
new Random()
构造函数使用当前时间作为种子。
除非您在调试器中等待,否则所有Random
实例都具有相同的种子。
您应该使用单个实例。
答案 1 :(得分:6)
这与随机数的生成方式有关。
如果你选择
Random rnd = new Random();
并将其移出循环,您应该看到所需的结果。
更多背景资料:
随机数生成器根据您实例化它的时间使用种子。因为您的代码运行得如此之快,所以种子是相同的,所以数字是相同的。这就是为什么当你单步执行时它会起作用的原因。
在循环之外实例化Random将实例化一次并使用随机算法生成新数字。