搜档网
当前位置:搜档网 › C#_random_函数_C#随机函数random()典型用法集锦

C#_random_函数_C#随机函数random()典型用法集锦

简介摘要: Random.Next() 返回非负随机数; Random.Next(Int) 返回一个小于所指定最大值的非负随机数 Random.Next(Int,Int) 返回一个指定范围内的随机数 1、random(number)函数介绍 见帮助文档,简单再提一下 Random.Next() 返回非负随机数[sui ji shu];

Random.Next(Int) 返回一个小于所指定最大值的非负随机数[sui ji shu]

Random.Next(Int,Int) 返回一个指定范围[fan wei]内的随机数[sui ji shu]



1、random(number)函数[han shu]介绍
见帮助文档[wen dang],简单再提一下,random(number)返回一个0~number-1之间的随机整数.参数[can shu]number代表一个整数.
示例:
trace(random(5));

2、Math.random()
见帮助文档[wen dang]。返回一个有14位精度[jing du]的0~1之间的数,注意没有参数[can shu]。
示例:
trace(Math.random());



3、自定义的函数[han shu]
我们有时候需要的随机数[sui ji shu]可不是这么简单。
比如我们想返回一个有两位小数的随机数[sui ji shu],返回两个数之间的随机数[sui ji shu],返回字母随机数[sui ji shu],返回多个随机数[sui ji shu]等等,
这些都需要我们自己编写函数[han shu]来实现。下面的 代码[dai ma] 直接复制到主场景第一帧就可以调用[tiao yong]了。注意有的函数[han shu]需要入口参数[can shu]。

#1: 返回一个共有n位数,其中m位是小数的随机数[sui ji shu]



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));实验一下。这个函数[han shu]简单。Math.pow(n,m)用于[yong yu]返回一个以n为底,m为指数的数。乘方!


# 2: 返回一个n到m之间的随机数[sui ji shu]





function randomNm(n,m){
if(m>=n){
return random(m-n+1)+n;
}
else {
return false;
}
}


之所以用random(m-n+1)是因为随机数[sui ji shu]的范围[fan wei]是m-n,加上1使得m也能在里面。加上n保证随机数[sui ji shu]以n为下限。
加上判断使函数[han shu]更完整。另外,如果要返回一个负数随机数[sui ji shu],也可以用randomNm(n,0);当然,我想更一般的是用-random(n);

# 3: 返回一个字母





function randomAscii(){
var c = String.fromCharCode(random(26)+65);
if(random(2)){
return c.toLowerCase();
}
return c;
}





#4: 返回一个不区分大小写的随机字母

如果要返回大写,把if条件[tiao jian]句去掉就行了。如果要返回小写,可以把条件[tiao jian]句改为恒成立,或者去掉条件[tiao jian],最后一句改为:
return c.toLowerCase(); String.fromCharCode(number)函数[han shu]返回number代表数字[shu zi]的ASCII码。
toLowerCase()用于[yong yu]将大写字母转为小写。

# 5: 返回一个n到m之间的k个互异随机数[sui ji shu]


private void RandomKDiffer(int n, int m, int k, int[

] arrayK){
int i = 0;
int a,j;
Random random = new Random();

while (i < k) {
a =random.Next(m-n+1)+n;
for (j = 0; j < i; j++) {
if (a == arrayK[j]) {
break;
}
}
if (j == i) {
arrayK[i] = a;
i++;
}
}
}

数组[shu zu]arrayK中的元素即为所得值。注意到我们借用了random(m-n+1)+n来返回一个n~m的随机数[sui ji shu]。所以m本身也会被返回。
如果要返回m以内的数,可以把n值改为0。如果要随机返回不确定个数,可以把入口参数[can shu]的K值赋为k=random(m-n);
随机返回不一定互异的数,把判断去掉就可以了,注意i++不要漏掉。这里不再给出。

#指定若干个字符[zi fu]/数字[shu zi],然后从中随机返回一个(或多个)字符[zi fu]/数字[shu zi],可以把原字符[zi fu]赋给一个数组[shu zu],再根据数组[shu zu]的下标[xia biao]来
决定返回值。这里不再举出函数[han shu],大家可以自己尝试。

#另需指出,对于随机设定一个MC的颜色值,我们较多采用mcColor.setRBG(random(0xFFFFFF));下面的例子中会有说明[shuo ming]。
如果要指定一个色域,可以采用上面给出的函数[han shu]。如果对Color对象[dui xiang]不太了解的可以查帮助,这里不作讨论。
以上函数[han shu]算是由random直接衍生的,下面再举个例子,可以说是衍生函数[han shu]的衍生函数[han shu],其中会直接用到上面给出的函数[han shu],请注意。

#6: 返回一个指定长度的随机大写英文字[wen zi]符串[zi fu chuan]


function randomString(n){
var arrayA = randomKdiffer(1, 26, n);
var arrayB = "";
for (var i = 0; i < n; i++) {
c=String.fromCharCode(arrayA[i]+64);
/* if(random(2)){
c=c.toLowerCase();
}
*/
arrayB = arrayB+c;
}
return arrayB;
}
注意到StringCharCode方法[fang fa],如果要写成小写,则把返回值写成arrayB.toLowerCase();如果返回一个不区分大小写的字符[zi fu]串[zi fu chuan],
则把注释[zhu shi]去掉.如果要返回一个不指定长度的字符[zi fu]串[zi fu chuan],则可以把入口参数[can shu]赋值[fu zhi]为random(n);这样只指定其上限.此函数[han shu]也可以用
randomAscii函数[han shu]实现,留给大家自己思考.

#7:在几个区域[qu yu]中选出随机数[sui ji shu]

比如,在1~20,45~70这两段数之间选取[xuan qu]一个随机数[sui ji shu]。因为区域[qu yu]数未定,所以直接用一个确定的函数[han shu]编写多有不便,
我们要使用的方法[fang fa]就是用switch语句[yu ju]进行定向,具体的我们给出一个函数[han shu],返回一个1~20,45~70内的数,其它区域[qu yu]读者请自行更改。

function randomArea(){
var a=random(2);
switch(a){
case 0:
return randomNm(1,20);break;
case 1:
return randomNm(45,70);break;
}
}
注意,我们

并没有写入口参数[can shu],而是直接在函数[han shu]中就确定了是两段数,而且范围[fan wei]也是确定的。如果是三段,则改为a=random(3);
同样增加一个case就可以了。当然,你也可以把第段数的范围[fan wei]设为入口参数[can shu],这里就不再举例了。但是这样做可能会使参数[can shu]增多,
我个人是不太喜欢一个需要很多参数[can shu]的函数[han shu]的。类似的,我们也可以随机返回一个字母段或几个字母段或者字母加数字[shu zi]段[shu zi duan]的一个数。
方法[fang fa]也只是前几个函数[han shu]的一个结合。这里仅举一例,返回指定的大写字母段的一个随机字母。
提醒一下,小写字母的ASCII码a~z分别对应97~122.

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;
}
}
其中用到一个函数[han shu]ord(char),这是一个不推荐的函数[han shu].用于[yong yu]返回char字符[zi fu]的ASCII码。

如果大家想在任何地方调用[tiao yong]函数[han shu],则需要稍稍变一下,把我们写的函数[han shu]改变为全局函数[han shu].这样就可以不用标明路径[lu jing]而自如地向调用[tiao yong]系统[xi tong]
函数[han shu]一样了.方法[fang fa]如下.例如:函数[han shu]randomXiao如果要声明[sheng ming]为全局函数[han shu],需要把第一行改为:

_global.randomXiao=function(n,m){
//statment
}

对全局函数[han shu]的概念不很清楚的朋友不用被这个名词吓倒.
这样改了函数[han shu]第一行之后,在任何地方,比如在一个MC里,直接用(对,直接用,不用加_root路径[lu jing]了)randomXiao(n,m)就可以


相关主题