博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#中随机数的生成问题
阅读量:7068 次
发布时间:2019-06-28

本文共 1217 字,大约阅读时间需要 4 分钟。

默认情况下,C#中的伪随机数生成器Random是根据系统时间来设置其种子的。若我们采用默认的方式,对Random进行初始化的时候不赋予任何参数,其随机种子便采用系统时间。如果我们用循环一次生成多个随机数,由于CPU运算速度太快了,所以每次取到的都是同一个时间,即生成的随机数都会一样,因此每次生成随机数之前需要更换随机数种子。

对于这种情况,我们可以采用加密随机数生成器来生成不同的种子,每次需要生成随机数的时候为Random赋予不同的种子,即使在很短的时间内也可以保证生成的随机数不同。具体代码如下:

///         /// 加密随机数生成器,生成随机种子        ///         /// 
private static int Chaos_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即可,代码如下:

//用消息框输出十个随机数            string strMSG = "";                        for (int i = 0; i < 10; i++)            {                //每次生成随机数的时候都使用机密随机数生成器来生成种子,                //这样即使在很短的时间内也可以保证生成的随机数不同                Random rdm = new Random(Chaos_GetRandomSeed());                //获取一个10到30之间的随机数                int iRand = rdm.Next(10, 300);                strMSG += iRand.ToString() + " ";                            }            MessageBox.Show(strMSG,"随机数测试");

 程序最终运行截图如下:

转载于:https://www.cnblogs.com/chaosimple/archive/2012/05/13/2498161.html

你可能感兴趣的文章
【转载】QPS、PV 、RT(响应时间)之间的关系
查看>>
PHPdom操作查找xml标签文本
查看>>
git多个公钥
查看>>
java基础
查看>>
idea在window10 快捷键的坑
查看>>
算法编程题
查看>>
读书笔记(二)Java中值传递、引用传递理解
查看>>
多级联动代码示例-数据为数组
查看>>
Java媒体框架(JMF),个人很欣赏.... (转)
查看>>
将一个php的一个查询代码改成go语言
查看>>
[转]Java大数据量导出Excel的问题
查看>>
学习emoji
查看>>
服务器端物理实现(三)
查看>>
HDFS和本地文件系统的关系
查看>>
mac下多个php版本快速切换的方法
查看>>
成为大牛的4步
查看>>
【设计模式】—— 组合模式Composite
查看>>
关于OSG+VR里显示手柄的工作记录
查看>>
Hello Blog
查看>>
Openerp internal server error
查看>>