首页 > 编程语言 >C# Random类 伪随机数生成器

C# Random类 伪随机数生成器

时间:2023-05-09 14:22:05浏览次数:38  
标签:C# Random 生成器 int 随机 随机数 100 种子

  Random类表示伪随机数生成器,它是一种能够产生满足某些随机性统计要求的数字序列的设备,其方法如下表:

Random类方法
方 法 说 明
Next 已重载。返回随机数
NextBytes 用随机数填充指定字节数组的元素
NextDouble 返回一个介于0.0和1.0之间的随机数
Sample 返回一个介于0.0和1.0之间的随机数
ToString 返回表示当前Object的String (继承自Object)

  Random类是一个产生伪随机数字的类,它的构造函数有两种:一个是直接new Random(),另外一个是new Random(Int32);前者是根据触发那一刻的系统时间作为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是用UnCheck((int)DateTime.Now.Ticks)作为参数种子。因此,如果计算机运行速度很快,如果触发Random函数间隔时间很短,就有可能产生一样的随机数,因为伪随机的数字在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。

  对于随机数,大家都知道,计算机不可能产生完全随机的数字。所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似地模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到得随机数都足够地“随机”,随机种子得选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生得随机数也会一样。一般的,使用同系统的时间有关的参数作为随机种子,这也是.NET中的随机数发生器默认采用的方法。

  可以使用以下两种方式初始化一个随机数发生器。

  (1)不指定随机种子,系统自动选取当前时间作为随机种子:

           Random ran = new Random();

   (2)可以指定一个int型参数作为随机种子:

          int iSeed = 10;

          Random ro = new Random(iSeed);

          long tick = DateTime.Now.Ticks;

          Random ran = new Random((int)(tick & 0xffffffffL)|(int)(tick>>32));

  这样可以保证99%不是一样。

  之后就可以使用这个ro对象来产生随机数,这时要用到Random.Next()方法。这个方法使用相当灵活,甚至可以指定产生的随机数的上下限。

  不指定上下限的使用如下:

         int result = ro.Next();  //返回非负的一个随机数

  下面的代码指定返回小于100的随机数:

        int result = ro.Next(100); //切记返回的随机数小于100,不包括100.

  而下面这段代码则指定返回值必须在50~100的范围之内:

       int result = ro.Next(50,100);  //切记返回的随机数包括50,但不包括100.

  除了Random.Next()方法之外,Random类还提供了Random.NextDouble()方法产生一个范围在0.0~1.0之间的随机的双精度浮点数:

      double result = ro.NextDouble();

  

标签:C#,Random,生成器,int,随机,随机数,100,种子
From: https://www.cnblogs.com/YDSLM/p/17384557.html

相关文章

  • @Html.Partial vs @Html.Action
    @Html.Partialand@Html.ActionarebothusedinASP.NETMVCtoincludereusablecontentinaview.@Html.Partialrendersapartialviewdirectly.It'susefulforrenderingsmallandsimpleviews,[email protected]......
  • MySQL(二十一)MVCC多版本并发控制
    MySQL(二十一)MVCC多版本并发控制1什么是MVCCMVCC(MultiversionConcurrencyControl)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行一致性读操作有了保障。就是为了查询一些正在被其他事务更新的值的时候,能够查到它们被更......
  • Unable to open debugger port (127.0.0.11774) java.net.BindException Address alre
    解决intellijIDEA启动项目报错:Unabletoopendebuggerport(127.0.0.1:1774):java.net.BindException"Addressalreadyinuse:bind"cause(原因)端口被占用❗resolve(解决)netstat-aon|findstr"端口号"taskkill-f-pid进程号参考博客解决idea启动项目报错:U......
  • Spring Boot项目对接腾讯云COS对象存储上传文件接口
    SpringBoot项目对接腾讯云COS对象存储上传文件接口pom.xml<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.35</version></dependency>application.ymlcos:secretId:xxx......
  • Spring Boot 单体应用一键升级成 Spring Cloud Alibaba
    作者:十眠背景随着ApacheDubbo、Nacos以及SpringCloud等服务框架的流行,越来越多的企业开始采用微服务架构来构建其应用程序。微服务架构使企业能够将其应用程序拆分成多个小型服务,这些服务可以独立部署和扩展。这种架构模式也使企业更容易实现敏捷开发和持续交付,从而提高了......
  • [AtCoder-AT_ABC070_A]题解(C++)
    PartIPreface原题目(Luogu)原题目(AtCoder)PartIISketch给定一个正整数\(n(100\leqn\leq999)\)。求\(n\)是否是一个回文数,是输出\(\texttt{Yes}\),不是输出\(\texttt{No}\)。PartIIIAnalysisSolve1如果仔细观察的话,应该都能发现,\(n\)一定是一个三位数。......
  • 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服
    我们知道chatgpt最近非常的火爆,朋友圈啊,短视频到处都是chatgpt身影。但是网上看到各种教程资源,都是不是百分一百的免费,毫无保留教给你的,要么是卖账号要么是割韭菜的。其实没有什么可以学习的,使用他也很简单,付费学习这些真不值得,大家不要再去看网上那些其乱七八糟的了,什么使用......
  • [SWPUCTF 2021 新生赛]非常简单的逻辑题
    查壳:进入:不是很难的逻辑,浅浅来个爆破过了:(这里提醒一下,如果实在逆推不出来,可以考虑爆破,爆破应该是RE里人手一个的必备)result1='v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'flag1=''num=0foriinrange(0,len(result1),2):forainrange(32,127):......
  • 第二个BDC程序
    *&---------------------------------------------------------------------**&ReportZBDC5*&*&---------------------------------------------------------------------**&*&*&-----------------------------------------------------......
  • 【JUC】原子操作
     juc包下的原子类针对基础类型地原子性读写而设计的原子类:AtomicBooleanAtomicIntegerAtomicIntegerArrayAtomicIntegerFieldUpdater<T>AtomicLongAtomicLongArrayAtomicLongFieldUpdater<T>针对引用类型地原子性读写而设计的原子类:......