Random类取随机数小测试

  随机数是编程中也会常遇到的,之前有对C#获取随机数的问题瞎逼逼了几句。现在再更深入一点点了解随机数的获取。编程这些小知识点就这样,越是深入一点点,越是爽,额......好像说错了?

从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的“一种子,一序列”原则

 

 

华丽的分割线


 

 

总结

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

 

posted @ 2017-03-31 15:16  蓝色咖啡屋  阅读(225)  评论(0编辑  收藏  举报
韦小明(email:3301526363@qq.com)