当前位置: 首页 > news >正文

关于C#中随机数的生成问题

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

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

        /// <summary>
        /// 加密随机数生成器,生成随机种子
        /// </summary>
        /// <returns></returns>
        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

相关文章:

  • 梦断代码阅读笔记01
  • JSON 之 SuperObject(11): TSuperTableString、TSuperAvlEntry
  • js中Object.create作用,什么时候用?和new是什么区别
  • 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
  • 【289】◀▶ Python I/O 读写文本文件
  • Model to Text工具Acceleo使用教程(三)——一个简单的代码生成模块
  • UVa11426 最大公约数之和(正版)
  • mac os下通过命令行的方式编译c++代码并在xcode里引用
  • 房地产英语 Real estate词汇
  • 根据Forms名找出其所归属的权限组
  • oss web直传
  • dd-wrt达到300Mbps的关键设置
  • 跨域
  • [转载] 考试经验——2011下半年信息系统项目管理师论文52分者谈论文写作经验...
  • 『TensorFlow』TFR数据预处理探究以及框架搭建
  • 【node学习】协程
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 2019.2.20 c++ 知识梳理
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript中的对象个人分享
  • Js基础知识(四) - js运行原理与机制
  • Sass Day-01
  • Shadow DOM 内部构造及如何构建独立组件
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vim Clutch | 面向脚踏板编程……
  • 工程优化暨babel升级小记
  • 回顾 Swift 多平台移植进度 #2
  • 简单数学运算程序(不定期更新)
  • 设计模式(12)迭代器模式(讲解+应用)
  • 数据结构java版之冒泡排序及优化
  • 小李飞刀:SQL题目刷起来!
  • 用 Swift 编写面向协议的视图
  • 正则学习笔记
  • 阿里云ACE认证学习知识点梳理
  • 容器镜像
  • ###C语言程序设计-----C语言学习(3)#
  • ###C语言程序设计-----C语言学习(6)#
  • #Linux(帮助手册)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (33)STM32——485实验笔记
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (初研) Sentence-embedding fine-tune notebook
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计高校学生选课系统
  • (三分钟)速览传统边缘检测算子
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net CHARTING图表控件下载地址
  • .net core Swagger 过滤部分Api
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • @RestController注解的使用
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory