首页 > 其他 > 详细

Random类取随机数小测试

时间:2017-03-31 15:35:59      阅读:288      评论:0      收藏:0      [点我收藏+]

从MSDN网上copy几句原理说明

表示伪随机数生成器,这是一种能够产生满足某些随机性统计要求的数字序列的设备。伪随机数字从一组有限的数字选择以相同的概率。 因为数学算法可用于选择它们,但它们是充分随机实用的角度而言,所选的数字不完全随机的。(关键词:伪伪伪......随机数)

Random类源代码:Reference Source

如果同一个种子用于单独 Random 对象,则它们将生成相同的一系列随机数字。 这可以是用于创建测试套件,用于处理随机值,或者用于重播从随机数字派生其数据的游戏。 但请注意, Random 不同版本的.NET Framework 下运行的进程中的对象可能会返回不同的随机数字的序列,即使它们使用相同的种子值实例化。若要生成的随机数的不同序列,您可以种子值依赖于时间,从而产生不同的系列的每个新实例 Random。无参数 Random() 构造函数使用系统时钟生成其种子值。 不过,由于时钟具有有限的解决方法,使用无参数构造函数来创建不同 Random 中连续的对象创建生成的随机数的相同序列生成器。 在大多数 Windows 系统, Random 在另一个 15 毫秒内创建的对象可能会遇到的相同种子值。(关键:一种子,一序列;避免多个实例化

更多详解 --》

对原理说明的小结

感谢N年前语文老师的不倦教育,总结能力很烂,总算还是有点点,没全忘了。

简单地说:random生成的是伪......随机数序列,一个种子一批数字序列,尽量避免多实例化

小测试

1、相同的种子,生成相同的随机数序列。

2、多实例化产生的尴尬:使用无参 Random() ,极短时间内产生的数字序列相同。

代码(网页版的,代码分后端和前端)

C#写的方法,简单写了三种方法实例化Random类,

以‘1’为种子全局实例化了一个random对象ran;

在方法中以参数‘seed’为种子实例化另一个random对象tRandom;

使用无参数的Random实例化。

方法返回Random每种方式实例化对象单个随机数,循环产生的多个随机数

技术分享

前端js,写了个方法,点击按钮,异步请求后台方法计算的随机数

技术分享

初始页面

界面简单,清晰,明了,易懂,美观,大方

技术分享

(重要说明:第一行为单个随机数,第二行多个随机数;第一列为方式1,第二列为方式2,第三列为方式3)

 开始测试

(重要说明:第一行为单个随机数,第二行多个随机数;第一列为方式1,第二列为方式2,第三列为方式3)

1、种子设置为‘1’,多次获取随机数

技术分享

技术分享

技术分享

技术分享

技术分享

测试结果说明:

方式1和方式2的种子都是‘1’,所以产生的随机数列是一样的,获取的单个随机数和循环获取的多个随机数列都是一样的;

方式3为Random类默认的时间种子,与方式1、2的种子不同,所以得到的结果与1和2不同;

方式1和方式2在获取多个随机数方法中,是在循环之外实例化对象,结果这两种方式各自获取的是一组不相同的随机数。而方式3是在循环内实例化的,在运行中会多次实例化出对象,在极短的时间内实例化出的对象生成的数字序列是相同的,因此得到的是一组相同的随机数。

多次获取随机数,即多次运行方法获取随机数,方式1和方式2的结果都是一样的,而方式3获取的结果不相同。说明 Random的“一种子,一序列”原则

 

2、种子设置为‘2’,再次多次获取随机数

技术分享

技术分享

技术分享

技术分享

技术分享

测试结果说明:

再次验证,Random的“一种子,一序列”原则

 

 

华丽的分割线


 

 

总结

 把这些鬼东西写出来,有助于加深记忆,更重要是更深入了解、把握。

 

Random类取随机数小测试

原文:http://www.cnblogs.com/youler/p/6651514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!