求教Flash As2.0生成一个给定范围内,不等于某些指定数字的随机数

设计一个函数intRandomNEQ(range,[neq1,neq2,neq3,...]):Number
要求,生成范围为0-range以内的随机整数(不包含range)并且不能是neq1,neq2....
注意neq1,neq2等不是以数组形式给出的...而是直接作为函数参量...
例如intRandomNEQ(10,2,3,5)则生成一个10以内但不等于2,3,5的整数..
下面是我写的一段代码
function intRandomNEQ(__x:Number):Number {
if(arguments.length<=1){
return intRandom(__x);
}else{
var tempRand=0;
while(true){
tempRand=intRandom(__x);
for(var i=1;i<=arguments.length;i++){
if(i==arguments.length){
return tempRand;
}
if(tempRand==arguments[i]){
break;
}
}
}
}
}
这段代码感觉太冗杂了,请问一下有没有更简短的算法?不吝赐教……尽可能if,for,while嵌套少一些……

as2.0

function intRandomNEQ(range:Number):Number{
arguments[0] = "";
var str:String = arguments.join(",");//2.0的Array没有indexOf方法,所以转成字符串再使用indexOf方法

var arr:Array = new Array();
for(var i:Number=0;i<range;i++){
if(str.indexOf(","+i)==-1){
arr.push(i);
}
}

return arr.length>0?arr[Math.floor(Math.random()*arr.length)]:-1;
}

trace(intRandomNEQ(10,2,5,7));//不包括2,5,7的10以内(不包括10)的随机整数


as3.0

function intRandomNEQ(range:uint,...res:*):uint{
var arr:Array = new Array();
for(var i:uint=0;i<range;i++){
if(res.indexOf(i)==-1){
arr.push(i);
}
}

return arr.length>0?arr[Math.floor(Math.random()*arr.length)]:-1;
}

trace(intRandomNEQ(10,2,5,7));//不包括2,5,7的10以内(不包括10)的随机整数

温馨提示:内容为网友见解,仅供参考
无其他回答

求教Flash As2.0生成一个给定范围内,不等于某些指定数字的随机数
as2.0 function intRandomNEQ(range:Number):Number{arguments[0] = "";var str:String = arguments.join(",");\/\/2.0的Array没有indexOf方法,所以转成字符串再使用indexOf方法var arr:Array = new Array();for(var i:Number=0;i<range;i++){if(str.indexOf(","+i)==-1){arr.pus...

flash as2.0---生成随机不重复的数字,随机的功能解决了,但不重复部分不...
顺序存储一组数字数组(如存储从0到12的数组A),用随机函数random(12)随机获取一个下标(如5,那么读取A[5],即6),将获取到的那个数字从数组里删除(好像是pop函数),然后再重新用random(11)随机获取,如此循环得到的随机数一定是不重复的。

相似回答