用JavaScript产生n个[min,max]区间内的不重复随机数。

实战:

(1)案例描述

用JavaScript产生n个[min,max]区间内的不重复随机数。

(2)实现思路

1.运用Math对象的random()方法生成一个[min,max]区间内的随机数;

2.生成n个[min,max]区间内的不重复随机数,生成第i个[min,max]区间的随机数时,与之前i-1个数比较,如有重复,令i=i-1;重复生成第n个随机数。确保每次生成的随机数都不重复。

代码如下:

<html>
    <head>
    <title>产生n个不同随机数</title>
    </head>
    <body>
    <script>
    //函数1 求指定范围内的一个随机数
        function selectFrom(min,max)
        {
            var sum = max-min+1;
            return Math.floor(Math.random()*sum+min);
            }
        //函数2 求指定范围内n个不重复的随机数
        function myNum(n,min,max)
        {
            var a = [];
            for(i=0;i<n;i++)
            {
                a[i]=selectFrom(min,max);
                for(z=0;z<i;z++)
                {
                    if(a[i]==a[z])
                    {
                        i--;
                        break;
                    }
                }
                
            }
            return a;
        }
        var result = myNum(10,1,10);
        console.log(result.toString());
    </script>
    </body>
</html>

 

我们先申明一个selectFrom函数,求他指定范围内的随机数,然后,再声明一个函数,因为selectFrom函数只能声明一个随机数,我们要想声明n个随机数,就要加个for循环,因为我们要生成n个数,每生成一个数就要和前面生成的数做比较,如果后面这个数和前面生成的一样,那么这个数就要重新生成,避免重复。那如何把这个值和前面的值进行比较呢,那么前面的数就要存储下来,把他输出到控制台是没法存储下来的,所以我们这里就要声明数组,然后把他放到for循环里面,由于我们还要把当前数组生成的值与数组以前的0到 i -1的这个范围的值进行比较,所以这里还要加一个for循环,把他和前面的进行比较,如果相等,就 i – -,然后用break跳出当前循环,再进行 i ++,重新执行一次。这样我们把得到的数组返回,把他变成字符串打印出来,运行结果如下,就没有重复的了:

 

版权声明:本文为daitu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/daitu/p/12681679.html