获取指定范围内N个不重复的随机数

    技术2022-05-11  65

    获取指定范围内N个不重复的随机数

    在项目开发中我们经常需要获取一些不重复的数字,为此我写了一个通用的方法。思路是建立一个数组,每随机产生一个新的数字就查询一遍数组,如果该数字存在于数组中则跳过,重新产生新的随机数,如果不存在则往数组中存入生成的数字,如此循环N(你所要获取的个数)遍。最后返回生成好的数组(可选择是否对数组排序)。代码如下:-------------------------------------------------------------javascript版本:[html]<script language="JavaScript">/*           +---------------------------------------------------------------------------------------+          | Project...........: 获取指定范围内N个不重复的随机数                          |          | Version..........: 1.0                                                                                    |          | Last Modified..: 2006-11-16                                                                        |          | Author...........: Flyingfish                                 |          | Homepage.....: http://www.csdn.net                                            |          | Support.........: penglongxiang##gmail.com (将##替换成@)                 |          | Copyright (C) 2006 Flyingfish                                                                      |          | 转载请注明作者,出处.基本版权,谢谢!!!                                      |          +---------------------------------------------------------------------------------------+*/function getRndNum(minInt,maxInt,num,order) {        //随机产生num个minInt-maxInt之间的不重复数        var num = parseInt(num);    if (num>maxInt-1)    {        alert("超出获取上限!最多获取"+(maxInt-minInt-1)+"个不重复随机数字。")        return false;    }        //建立长度为num的数组        var numArr = new Array(num);        //当前已有个数        var tempnum = 1;        //初始化数组数据        numArr[tempnum-1] = Math.floor(Math.random()*(maxInt-minInt))+minInt;    if(num>1){        do {            //新产生的数字            var newInt = Math.floor(Math.random()*(maxInt-minInt))+minInt;            //代表是否重复,0不重复,1重复            var isRepeat = false;            //开始遍历已有数组中数字,与新产生的数字比较是否存在,如存在则为1            for (i=0; i<tempnum; i++) {                if (newInt == numArr) {                    isRepeat = true;                    break;                }            }            //如果不重复则加入数组            if (!isRepeat) {                //个数加1                tempnum++;                //往数组中存入数据                numArr[tempnum-1] = newInt;            }        } while (tempnum<num);        //排序,如果order=-1,则按从小到大排列,如果order为1则按从大到小排列,其他不改变顺序        if (order == -1) {            numArr.sort(new Function("a","b","return a-b;"));        }        if (order == 1) {            numArr.sort(new Function("a","b","return b-a;"));        }      }        return numArr;}

    //测试//document.write("35选7:<font color='red'>"+getRndNum(1, 35, 5.5,-1)+"</font><br />")//document.write("双色球:<font color='red'>"+getRndNum(1, 33, 6,-1)+"</font>  <font color='blue'>"+getRndNum(1, 16,1)+"</font>")</script>[/html]--------------------------------------------------ActionScript版本:/*           +---------------------------------------------------------------------------------------+          | Project...........: 获取指定范围内N个不重复的随机数                          |          | Version..........: 1.0                                                                                    |          | Last Modified..: 2006-11-16                                                                        |          | Author...........: Flyingfish                                 |          | Homepage.....: http://www.csdn.net                                                |          | Support.........: penglongxiang##gmail.com (将##替换成@)                 |          | Copyright (C) 2006 Flyingfish                                                                      |          | 转载请注明作者,出处.基本版权,谢谢!!!                                      |          +---------------------------------------------------------------------------------------+*/

    function getRndNum(minInt:Number, maxInt:Number, num:Number, order:Number) {        //随机产生num个minInt-maxInt之间的不重复数        var num = num;        if (num>maxInt-1) {                trace("超出获取上限!最多获取"+(maxInt-minInt-1)+"个不重复随机数字。");                return false;        }        //建立长度为num的数组        var numArr:Array = new Array(num);        //当前已有个数        var tempnum = 1;        //初始化数组数据        numArr[tempnum-1] = random(maxInt-minInt)+minInt;        if (num>1) {                do {                        //新产生的数字                        var newInt:Number = random(maxInt-minInt)+minInt;                        //代表是否重复,0不重复,1重复                        var isRepeat:Boolean = false;                        //开始遍历已有数组中数字,与新产生的数字比较是否存在,如存在则为1                        for (i=0; i<tempnum; i++) {                                if (newInt == numArr) {                                        isRepeat = true;                                        break;                                }                        }                        //如果不重复则加入数组                        if (!isRepeat) {                                //个数加1                                tempnum++;                                //往数组中存入数据                                numArr[tempnum-1] = newInt;                        }                } while (tempnum<num);                //trace("数组:"+numArr);                //排序,如果order=-1,则按从小到大排列,如果order为1则按从大到小排列,其他不改变顺序                if (order == 1) {                        numArr.sort(Array.DESCENDING);                }                if (order == -1) {                        numArr.sort(Array.NUMERIC);                }        }        return numArr;}//测试//trace(getRndNum(32, 85, 32, -1));其他版本的代码只要按照上面的思路书写即可 


    最新回复(0)