JavaScript实战:产生n个不重复随机数
用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 ++,重新执行一次。这样我们把得到的数组返回,把他变成字符串打印出来,运行结果如下,就没有重复的了: