博舍

C#产生指定范围随机数(整数、小数、字符、布尔,相对不重复的和唯一的)的几种方法 excel指定范围随机数生成保留小数点

C#产生指定范围随机数(整数、小数、字符、布尔,相对不重复的和唯一的)的几种方法

在C#中,一般都用Random产生随机数,它可任意指定产生随机数范围。

Random结合数组,可以产生一些特殊范围的随机数,以满足特殊的需要。如果在循环中产生随机数,由于间隔时间短,每次产生的随机数都一样,需要先生成种子(有3种方法),再用该种子产生随机数,或者锁住Random对象,这样才能减少产生随机数的重复率。如果要产生唯一的随机数(有4种方法),需要用数组或检查已产生随机数是否重复的办法。

一、用Random产生指定范围随机数(整数随机数)

1、产生指定上限的随机数(如产生100以内的随机数)

Randomran=newRandom();intn=ran.Next(100);

2、产生指定上下限的随机数(如产生100到1000的随机数)

Randomran=newRandom();intn=ran.Next(100,1000);二、用Random结合数组产生指定范围随机数(字符和布尔随机数)

在某些情况下,随机数只能取一些特殊指定的值,如不连续的数字或指定的一些单词等,此时仅用Random无法达到要求,必须借住数组才能实现。实现思路大概是这样:先把这些特殊的值存到数组中,然后把数组的长度作为Random的上限产生随机数,此随机数正是数组的下标,根据该下标取得数组的值。

(一)产生字符随机数

1、产生不连续或指定值的随机数

publicstringGetRandom(string[]arr){Randomran=newRandom();intn=ran.Next(arr.Length-1);returnarr[n];}//调用方法:string[]arr={"25","28","30","50","60"};GetRandom(arr);

2、生成保留指定小数位数(例如2位)的随机数

假如要用指定单词作为随机数的取值,代码实现跟上例相同,所不同的仅是随机数的取值,所以只要定义一个单词数组直接调用上面代码即可。调用方法:

string[]arr={"red","green","blue","orange","white"};GetRandom(arr);(二)产生布尔随机数publicboolGenerateBoolRandom(){bool[]arr={true,false};Randomran=newRandom();returnarr[ran.Next(2)];}//调用方法:Response.Write(GenerateBoolRandom());//结果true三、用Random产生小数随机数

在默认情况下,C#只能产生任意小数随机数,如果要产生指定范围小数随机数,需要自己写代码。写代码时,既可以把它们封装到一个方法中又可以封装到一个类中,后者可重载C#的NextDouble()方法。

1、把代码封装到一个方法

A、生成小数随机数

publicdoubleNextDouble(Randomran,doubleminValue,doublemaxValue){returnran.NextDouble()*(maxValue-minValue)+minValue;}//调用:Randomran=newRandom();doublerandNum=NextDouble(ran,1.52,2.65);Response.Write(randNum);//结果2.30927768119112

B、生成保留指定小数位数(例如2位)的随机数

publicdoubleNextDouble(Randomran,doubleminValue,doublemaxValue,intdecimalPlace){doublerandNum=ran.NextDouble()*(maxValue-minValue)+minValue;returnConvert.ToDouble(randNum.ToString("f"+decimalPlace));}//调用:Randomran=newRandom();doublerandNum=NextDouble(ran,5.16,8.68,2);//保留两位小数Response.Write(randNum);//结果8.46

2、把代码封装到一个类

usingSystem;usingSystem.Text;publicstaticclassRandomDoubleRange{publicstaticdoubleNextDouble(thisRandomran,doubleminValue,doublemaxValue){returnran.NextDouble()*(maxValue-minValue)+minValue;}publicstaticdoubleNextDouble(thisRandomran,doubleminValue,doublemaxValue,intdecimalPlace){doublerandNum=ran.NextDouble()*(maxValue-minValue)+minValue;returnConvert.ToDouble(randNum.ToString("f"+decimalPlace));}}//调用:Randomran=newRandom();doublerandNum1=ran.NextDouble(5.16,8.68);doublerandNum2=ran.NextDouble(5.16,8.68,2);//保留两位小数Response.Write(randNum1+";"+randNum2);//结果7.41055195257559;6.69四、产生相对不重复的随机数

当在一个循环中生成随机数,由于生成随机数的时间间隔比较短,容易产生重复的随机数,如果要产生不重复的随机数,需要用种子或把随机数对象锁住,以下是它们的实现方法。

1、用种子产生相对不重复的随机数

生成种子方法一:

publicstaticintGenerateRandomSeed(){return(int)DateTime.Now.Ticks;}//产生1到10的随机数为:2,5,2,5,7,3,4,4,6,3

生成种子方法二:

usingSystem.Text.RegularExpressions;publicstaticintGenerateRandomSeed(){returnConvert.ToInt32(Regex.Match(Guid.NewGuid().ToString(),@"d+").Value);}//产生1到10的随机数为:1,7,4,9,8,1,8,7,9,8

生成种子方法三:

usingSystem.Security.Cryptography;publicstaticintGenerateRandomSeed(){byte[]bytes=newbyte[4];RNGCryptoServiceProviderrngCSP=newRNGCryptoServiceProvider();rngCSP.GetBytes(bytes);returnBitConverter.ToInt32(bytes,0);}//产生1到10的随机数为:4,8,7,2,6,7,6,5,5,7

产生指定数目的随机数并存到数组:

//randNum为产生随机数的数目publicint[]GenerateRandom(intminValue,intmaxValue,intrandNum){Randomran=newRandom(GenerateRandomSeed());int[]arr=newint[randNum];for(inti=0;i

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇