C#Random()函数详解

上传人:zh****71 文档编号:193665198 上传时间:2021-08-22 格式:DOCX 页数:17 大小:23.07KB
返回 下载 相关 举报
C#Random()函数详解_第1页
第1页 / 共17页
C#Random()函数详解_第2页
第2页 / 共17页
C#Random()函数详解_第3页
第3页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C#Random()函数详解》由会员分享,可在线阅读,更多相关《C#Random()函数详解(17页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑C#Random()函数详解 C#Random()函数详解 随机数的使用很普遍,可用它随机显示图片,用它防止无聊的人在论坛灌水还可以用来加密信息等等。本文商量如何在一段数字区间内随机生成若干个互不相同的随机数,比方在从1到20间随机生成6个互不相同的整数,并通过此文介绍Visual c#中随机数的用法。 .net.Frameword中提供了一个特地产生随机数的类System.Random,此类默认状况下已被导入,编程过程中可以直接使用。我们知道,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并

2、不具有完全的随机性,但就有用而言,其随机程度已经足够了。 我们可以用以下两种方法初始化一个随机数发生器; 函数是这样用,比方100至999的随机数 Random ran=new Random(); int RandKey=ran.Next(100,999); 不过这样会有重复,可以给Random一个系统时间做为参数,以此产生随机数,就不会重复了 第一种方法不指定随机种子,系统自动选取当前时前作随机种子: Random ra=new Random(); 第二种方法是指定一个int型的参数作为随机种子: int iSeed=6; Random ra=new Random(iSeed); 下面我们要

3、用到Random.Next()方法产生随机数。 ra.Next(); 它返回一个大于或等于零而小于2,147,483,647的数,这并不满足我们的需要,下面我们介绍它的重载函数和其它一些方法。 public virtual int Next(int); 用法:ra.next(20) 返回一个小于所指定最大值(此处为20)的正随机数。 public virtual int Next(int minValue, int maxValue); 用法:ra.next(1,20) 返回一个指定范围内(此处为1-20之间)的随机数,我们在下面的实例中会用到此函数。 类System.Random还有几个方法

4、分别是: 公共方法: NextBytes用随机数填充指定字节数组的元素。 NextDouble返回一个介于 0.0 和 1.0 之间的随机数。 受爱护的方法: Sample返回一个介于 0.0 和 1.0 之间的随机数,只允许子类对象访问。 以上介绍了随机数的基本用法,下面我们用一个实例来做更进一步的介绍。要在一段数字区间内随机生成若干个互不相同的随机数,比方在从1到20间随机生成6个互不相同的整数。 主要是下面两个函数getRandomNum与getNum: public int getRandomNum(int num,int minValue,int maxValue) Random r

5、a=new Random(unchecked(int)DateTime.Now.Ticks); int arrNum=new intnum; int tmp=0; for (int i=0;i=num-1;i+) tmp=ra.Next(minValue,maxValue); /随机取数 arrNumi=getNum(arrNum,tmp,minValue,maxValue,ra); /取出值赋到数组中 return arrNum; getRandomNum即是在区间minValue,maxValue取出num个互不相同的随机数,返回的数组包含着结果。 其中随机数是这样创建的 Random r

6、a=new Random(unchecked(int)DateTime.Now.Ticks);为什么不用Random ra=new Random();系统自动选取当前时前作随机种子呢? 用系统时间做随机种子并不保险,假如应用程序在一个较快的计算机上运行,那么该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种状况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够随机,我们不得不使用冗杂一点的方法来获得随机种子。在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时

7、间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够随机的随机数。 函数getNum是一递归,用它来检测生成的随机数是否有重复,假如取出来的数字和已取得的数字有重复就重新随机获取。值得留意的是要用一同一个随机数实例生成,所以ra要作为参数传入getNum中,否那么生成的数字会有重复。 public int getNum(int arrNum,int tmp,int minValue,int maxValue,Random ra) int n=0; while (n=arrNum.Length-1) if (arrNumn=tmp) /利用循环推断是否有重复 t

8、mp=ra.Next(minValue,maxValue); /重新随机获取。 getNum(arrNum,tmp,minValue,maxValue,ra);/递归:假如取出来的数字和已取得的数字有重复就重新随机获取。 n+; return tmp; 最终就是要显示出来,当点击一个button时取出的数字显示在一个label中。 private void button1_Click(object sender, System.EventArgs e) int arr=getRandomNum(6,1,20); /从1至20中取出6个互不相同的随机数 int i=0; string temp=

9、; while (i=arr.Length-1) temp+=arri.ToString()+n; i+; label1.Text=temp; /显示在label1中 开始是介绍一下random()函数和Math.random()函数,然后介绍一些由此引出的自定义函数.对于如何实战出一些效果,那需要想象的翅膀和其它AS基础的支持.而算法本身并不困难.最终我会介绍一个简洁效果.盼望能启发读者的思维. Random.Next() 返回非负随机数; Random.Next(Int) 返回一个小于所指定最大值的非负随机数 Random.Next(Int,Int) 返回一个指定范围内的随机数 1、ran

10、dom(number)函数介绍 见关心文档,简洁再提一下,random(number)返回一个0number-1之间的随机整数.参数number代表 一个整数. 示例: trace(random(5); /复制到主场景第一帧. 2、Math.random() 见关心文档。返回一个有14位精度的01之间的数,留意没有参数。听说MM是推举用这个函数的,而不是上面那个. 示例: trace(Math.random(); /复制到主场景第一帧. 3、自定义的函数 MM给我们的就这两个函数了,但是需求与供给总是存在矛盾。我们有时候需要的随机数可不是这么简洁。 比方我们想返回一个有两位小数的随机数,返回两

11、个数之间的随机数,返回字母随机数,返回多个随机数等等, 这些都需要我们自己编写函数来实现。下面的代码直接复制到主场景第一帧就可以调用了。留意有的函数需要入口参数。 # 返回一个共有n位数,其中m位是小数的随机数 function randomXiao(n,m) var a = Math.pow(10, n+m); var b = random(a); return b=b/Math.pow(10, m); 可以用trace(randomXiao(3,2);试验一下。这个函数简洁。Math.pow(n,m)用于返回一个以n为底,m为指数的数。乘方! # 返回一个n到m之间的随机数 functio

12、n randomNm(n,m) if(m=n) return random(m-n+1)+n; else return false; 之所以用random(m-n+1)是因为随机数的范围是m-n,加上1使得m也能在里面。加上n保证随机数以n为下限。 加上推断使函数更完好。另外,假如要返回一个负数随机数,也可以用randomNm(n,0);当然,我想更一般的是用-random(n); # 返回一个字母 function randomAscii() var c = String.fromCharCode(random(26)+65); if(random(2) return c.toLowerCase(); return c; 返回一个不区分大小写的随机字母 假如要返回大写,把if条件句去掉就行了。假如要返回小写,可

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号