通过方法调用循环过快?

时间:2015-10-26 04:39:47

标签: c# for-loop random

我正在调用一个名为buy的方法实例。我的方法随机生成一串数字和数字。我的for循环似乎要快速更改字符串的方法因为我在获取新字符串之前连续2-3次获得相同的字符串。当我添加System.Threading.Thread.Sleep(100);我得到的随机数就像它应该的那样。问题是它太慢了,我觉得必须有更好的方法。有没有办法在不调用Sleep()方法的情况下每次获取随机字符串?

for (int i = 0; i < exit; i++)
{
    ticket = buy.SetNum();
    Console.WriteLine("Wellcome Mr.Nissan. The winning numbers for Lotto max are:");
    Console.WriteLine(ticket);
    System.Threading.Thread.Sleep(25);
}

3 个答案:

答案 0 :(得分:4)

是的,这是您的随机数生成器的问题 - 而不是您在问题中发布的代码。

考虑以下事项:

public int GenRandomNum()
{
   var r = new Random();
   return r.Next()
}

如果您在相同的刻度中调用它,则基于相同的种子生成新的随机类,并且它将生成相同的数字。移动方法的随机初始化方法将解决问题,如下所示:

private Random _rand = new Random();
public int GenRandomNum()
{
   return _rand .Next()
}

答案 1 :(得分:2)

您没有包含实际创建随机数的代码,但我怀疑您每次在循环周围创建一个新的随机数生成器实例。

您需要做的是创建随机数生成器的一个实例(在循环之外)并将其重用于每个随机数生成器.Next()调用。

答案 2 :(得分:0)

将随机数生成移动到循环中:

var rnd = new Random(); 

for (int i = 0; i < exit; i++)
{
    var ticket = rnd.Next();
    Console.WriteLine("Wellcome Mr.Nissan. The winning numbers for Lotto max are:");
    Console.WriteLine(ticket);
}

我无法告诉您为什么在没有看到buy.SetNum();方法代码的情况下,您发布的代码无法正常工作。