快速连续的随机数

本文关键字:随机数 连续 | 更新日期: 2023-09-27 17:54:55

我需要生成一个快速连续的随机数序列,但是我的应用程序的结构意味着我不能重用相同的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

快速连续的随机数

更改为:

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

如果你真的不能创建一个持久的Random类实例,你可以使用RandomNumberGenerator类来获得一些随机字节,然后使用这些来计算你的随机数。当然,您必须每次都创建一个新实例,并且该类比Random要慢一些,但是它可以完成您所要求的工作。

不要每次都随机new

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

您可以使用静态变量:

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循环外部实例化并在内部重用。