有效解决C# Random生成随机数重复的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuai_wy/article/details/78606175

在Random生成随机数的时候,如果短时间内连续生成随机数,就会导致生成的随机数相同。下面我们介绍如何解决在 短时间内生成随机数的时候,如何避免随机数不一样的问题。
(实例下载链接:http://download.csdn.net/download/shuai_wy/10128989

补充:即使我们生成随机数的区间不一样,但是仍然面临这个问题,区间里的点是一样的。

举个栗子:

假设我们要生成 [33,35], [8,10], 我们用这两个区间短时间内生成随机数,就会发现:

第一个区间生成的是 33 的时候,第二个区间生成的是 8; 第一个区间生成的是 34的时候,第二个区间生成的是 9;

一、 有效方案:

1. 提高随机数不重复概率的种子生成方法(推荐)

//获取随机种子
static int GetRandomSeed( )
{
    byte[] bytes = new byte[4];
    System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider( );
    rng.GetBytes( bytes );
    return BitConverter.ToInt32( bytes , 0 );
}

Random random = new Random( GetRandomSeed( ) );

2. 延时

Thread.Sleep(100);
Random ran = new Random();
ran.Next();

二、其他生成随机数的方法实例


    /// <summary>
    /// 根据中位数返回区间随机数
    /// </summary>
    /// <param name="mid"></param>
    /// <returns></returns>
    private static int GetRandom(int mid)
    {
        //1.
        //Random ran = new Random();

        //2.
        //Random ran = new Random(new Guid().GetHashCode());

        //3.
        //long tick = DateTime.Now.Ticks;
        //Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));

        //4.(*有效方法)
        //Thread.Sleep(100);
        //Random ran = new Random();

        //5.(*有效方法)
        Random ran = new Random(GetRandomSeed());

        return ran.Next(mid -5,mid +10);
    }

    static int GetRandomSeed()
    {
        byte[] bytes = new byte[4];
        System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
        rng.GetBytes(bytes);
        return BitConverter.ToInt32(bytes, 0);
    }


//控制台打印,测试一下
 static void Main(string[] args)
 {

      int count = 0;
     Random ran = new Random();
     int mid = 33;
     while (count < 50)
     {
         Console.WriteLine(GetRandom(mid));
         count++;
     }
     Console.ReadKey();
 }

生成随机数运行截图:

Random生成随机数

参考博文及实例

c# Random太快产生的随机数会重复: https://www.cnblogs.com/TouchAfflatus/p/3784225.html

实例下载: http://download.csdn.net/download/shuai_wy/10128989

阅读更多

扫码向博主提问

超帅的菜鸟博主

一毛钱,了解一下
  • 擅长领域:
  • C#
  • JAVA
  • Javascript
去开通我的Chat快问
换一批

没有更多推荐了,返回首页