C# Radom用法

 情况一: 多个Radom对象,指定随机种子.

 Console.WriteLine("1. 多个radom对象,指定随机种子");
            for (int i = 0; i < 10; i++)
            {
                var radom = new Random(5);
                Console.WriteLine(radom.Next(11));
            }

结果: 每次运行结果生成的随数都一样,未发生变化. 

 情况二: 多个Radom对象,使用默认随机种子.

Console.WriteLine("2. 多个radom对象,默认随机种子");
            for (int i = 0; i < 10; i++)
            {
                var radom = new Random();
                Console.Write(radom.Next(11)+",");
            }

结果: 每次运行结果生成的随数发生变化,同一循环体生成的随机数一样(我本机是这种情况)

 情况三: 一个Radom对象,指定随机种子.

Console.WriteLine("3. 一个radom对象,指定随机种子");
            var radom = new Random(5);
            for (int i = 0; i < 10; i++)
            {             
                Console.Write(radom.Next(11)+",");
            }

结果: 每次运行结果生成的随数一样,但同一循环体生成的随机数不一样.

 情况四: 一个Radom对象,默认随机种子.

Console.WriteLine("4. 一个radom对象,默认随机种子");
            var radom = new Random();
            for (int i = 0; i < 10; i++)
            {           
                Console.Write(radom.Next(11)+",");
            }

 结果: 每次运行结果生成的随数都不一样,同一循环体生成的随机数不一样.

MSDN说明:

    如果同一个种子用于单独 Random 对象,则它们将生成相同的一系列随机数字。 这可以是用于创建测试套件,用于处理随机值,或者用于重播从随机数字派生其数据的游戏。 但请注意, Random 不同版本的.NET Framework 下运行的进程中的对象可能会返回不同的随机数字的序列,即使它们使用相同的种子值实例化.

    若要生成的随机数的不同序列,您可以种子值依赖于时间,从而产生不同的系列的每个新实例 Random。 参数化 Random(Int32) 构造函数可以采用 Int32 值根据计时周期数以当前时间,而无参数 Random() 构造函数使用系统时钟生成其种子值。 不过,由于时钟具有有限的解决方法,使用无参数构造函数来创建不同 Random 中连续的对象创建生成的随机数的相同序列生成器。 下面的示例阐释了两个 Random 连续实例化的对象生成相同的一系列随机数字。 在大多数 Windows 系统, Random 在另一个 15 毫秒内创建的对象可能会遇到的相同种子值。

猜你喜欢

转载自blog.csdn.net/zp19860529/article/details/85257289