JavaScript实战:产生n个不重复随机数

实战:

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

猜你喜欢

转载自www.cnblogs.com/daitu/p/JavaScript3.html