快速连续的随机数

时间:2011-05-04 13:48:04

标签: c# random

我需要快速连续生成一系列随机数,但是我的应用程序结构意味着我不能重复使用相同的Random对象

所以我需要做的是,实质上:

using System;
namespace ConsoleApplication5 {
  class Program {
    static void Main() {
      for (int i = 0; i < 100; i++)
        Console.WriteLine(new Random().Next(int.MaxValue));
      Console.ReadLine();
    }
  }
}

然而,这显然会返回相同生成数的重复,因为使用的种子基于系统时钟,并且循环正在如此快速地迭代。

请注意,要生成的随机数很小(约100左右),因此算法不好无关紧要。请注意,显然因为我无法保持对Random对象的引用,所以我不能将最后生成的值用作下一次调用中的种子,因为它也不可用。

我每次如何获得不同的号码?

TIA

4 个答案:

答案 0 :(得分:6)

更改为:

Random rand = new Random();
for (int i = 0; i < 100; i++)
        Console.WriteLine(rand.Next(int.MaxValue));

答案 1 :(得分:5)

每次都不要随机new

  var random = new Random();
  for (int i = 0; i < 100; i++)
    Console.WriteLine(random.Next(int.MaxValue));

答案 2 :(得分:5)

如果您确实无法创建持久性Random类实例,则可以使用RandomNumberGenerator类获取一些随机字节,然后使用它们来计算随机数。当然,每次都必须创建一个新实例,并且该类比Random慢一些,但它可以做你想要的。

答案 3 :(得分:4)

您可以使用静态变量:

using System;
namespace ConsoleApplication5 
{
    class Program 
    {
        private static readonly Random _random = new Random();

        static void Main() 
        {
            for (int i = 0; i < 100; i++)
                Console.WriteLine(_random.Next(int.MaxValue));
            Console.ReadLine();
        }
    }
}

或使用本地随机变量,您将在for循环之外实例化并在内部重用。