


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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.tolowerca
13、se(); return c; 返回一个不区分大小写的随机字母 假如要返回大写,把if条件句去掉就行了。假如要返回小写,可以把条件句改为恒成立,或者去掉条件,最终一句改为: return c.tolowercase(); string.fromcharcode(number)函数返回number代表数字的ascii码。 tolowercase()用于将大写字母转为小写。 # 返回一个n到m之间的k个互异随机数 function randomkdiffer(n,m,k) arrayk = ; var i = 0; while (i k) a = random(m-n+1)+n; for (var
14、 j = 0; j i; j+) if (a = arraykj) break; if (j = i) arrayki = a; i+; return arrayk; 数组arrayk中的元素即为所得值。留意到我们借用了random(m-n+1)+n来返回一个nm的随机数。所以m本身也会被返回。 假如要返回m以内的数,可以把n值改为0。假如要随机返回不确定个数,可以把入口参数的k值赋为k=random(m-n); 随机返回不肯定互异的数,把推断去掉就可以了,留意i+不要漏掉。这里不再给出。 #指定若干个字符/数字,然后从中随机返回一个或多个字符/数字,可以把原字符赋给一个数组,再依据数组的下标
15、来 确定返回值。这里不再举出函数,大家可以自己尝试。 #另需指出,对于随机设定一个mc的颜色值,我们较多采纳mccolor.setrbg(random(0xffffff);下面的例子中会有说明。 假如要指定一个色域,可以采纳上面给出的函数。假如对color对象不太了解的可以查帮 助,这里不作商量。 以上函数算是由random直接衍生的,下面再举个例子,可以说是衍生函数的衍生函数,其中会直接用到上面给出的函数,请留意。 #返回一个指定长度的随机大写英文字符串 function randomstring(n) var arraya = randomkdiffer(1, 26, n); var ar
16、rayb = ; for (var i = 0; i n; i+) c=string.fromcharcode(arrayai+64); /* if(random(2) c=c.tolowercase(); */ arrayb = arrayb+c; return arrayb; 留意到stringcharcode方法,假如要写成小写,那么把返回值写成arrayb.tolowercase();假如返回一个不区分大小写的字符串, 那么把解释去掉.假如要返回一个不指定长度的字符串,那么可以把入口参数赋值为random(n);这样只指定其上限.此函数也可以用 randomascii函数实现,留给大家
17、自己思索. #在几个区域中选出随机数 比方,在120,4570这两段数之间选取一个随机数。因为区域数未定,所以直接用一个确定的函数编写多有不便, 我们要使用的方法就是用switch语句进行定向,具体的我们给出一个函数,返回一个120,4570内的数,其它区域读者请自行更改。 function randomarea() var a=random(2); switch(a) case 0: return randomnm(1,20);break; case 1: return randomnm(45,70);break; 留意,我们并没有写入口参数,而是直接在函数中就确定了是两段数,而且范围也是确
18、定的。假如是三段,那么改为a=random(3); 同样增加一个case就可以了。当然,你也可以把第段数的范围设为入口参数,这里就不再举例了。但是这样做可能会使参数增多, 我个人是不太喜爱一个需要许多参数的函数的。类似的,我们也可以随机返回一个字母段 或几个字母段或者字母加数字段的一个数。 方法也只是前几个函数的一个结合。这里仅举一例,返回指定的大写字母段的一个随机字母。 提示一下,小写字母的ascii码az分别对应97122. function randomaarea(a,b) if (ord(a) = ord(b) 65=ord(a) ord(b) = 90) return string.fromcharcode(randomnm(ord(a), ord(b); else return false; 其中用到一个函数ord(char),这是一个不推举的函数.用于返回char字符的ascii码。 假如大家想在任何地方调用函数,那么需要稍
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版大型商场机电安装工程合同范本张奇
- 2025版民法典离婚协议书编制流程与范文剖析
- 二零二五年度堆场租赁与安全防护服务合同
- 2025年度酒类企业仓储物流优化与整合服务合同
- 二零二五年度绿色节能建筑水电预埋施工合作协议
- 2025年度电厂钢煤斗施工临时道路与交通管制合同
- 二零二五年二手房买卖与家具搬运服务合同
- 2025版出租车合资购买合同书:出租车行业智能交通管理系统合作协议
- 2025版别墅产权交易合同范本含税费结算明细
- 2025年车贷抵押经营性合同协议
- 2025年十堰市茅箭区公开招聘50名社区工作者笔试备考试题及答案解析
- 浇筑楼板的质保合同范本
- 中铁自营项目管理办法
- 集团内部拆借管理办法
- 肛周脓肿病例分析
- 眩晕症的护理课件
- 企业信息化领导小组成员和职责
- 2025年丁烷气瓶市场前景分析
- 2025年北京市高考英语试卷(含答案)
- 计算机视觉与深度学习在交通工程中的应用
- 软件开发项目上线报告模板
评论
0/150
提交评论