javascript 如何生成不重复的随机数

JavaScript028

javascript 如何生成不重复的随机数,第1张

Math.random() 函数返回一个浮点,  伪随机数在范围[0,1)

得到两数之间的随机数:

function getRandomArbitrary(min, max) {

  return Math.random() * (max - min) + min} 得到一个两数之间的随机整数,包括两个数在内:

function getRandomIntInclusive(min, max) {

  min = Math.ceil(min)

  max = Math.floor(max)

  return Math.floor(Math.random() * (max - min + 1)) + min

复制代码

代码如下:

//获取数组中的随机数

//HF.Math.RandomNumbers是前缀,可以自己定义,主要看逻辑代码

HF.Math.RandomNumbers

=

function

(startNum,

endNum,

count,

repeat)

{

var

ret

=

[]

if

(repeat)

{

for

(var

i

=

0

i

<

count

i++)

{

ret[i]

=

HF.Math.Random(startNum,

endNum)

}

return

ret

}

var

tmp

=

[]

var

i

=

0

for

(var

s

=

startNum

s

<=

endNum

s++)

{

tmp[i++]

=

s

}

var

l

=

tmp.length

for

(i

=

0

i

<

count

i++)

{

ret[i]

=

HF.Array.Remove(tmp,

HF.Math.Random(0,

--l))

}

return

ret

}

你这写的有点混乱,稍微整理下:

<body>

<div id='odiv'></div>

<script>

var odiv=document.getElementById('odiv')

var num=''

var arr=[] 

/*//这里修改下  

for(var i=0i<4i=i+1){  //生成4个1-5不重复的数字

    var t=Math.floor(Math.random()*5)//生成随机数

    arr.push(t)    //把生成的数字放进这个数组里

}

*/

//修改成这样的:

//定义一个while循环,循环的条件是集合arr的子集少于4个

while(arr.length<4){

  var t=Math.floor(Math.random()*5)//生成随机数

  if(arr.indexOf(t)==-1){

   //如果t在集合arr中存在,indexOf会返回t在集合arr中的位置。

   //如果不存在,indexOf会返回-1

    arr.push(t)    //把生成的数字放进这个数组里

  }

}

for(var i=0i<=arr.lengthi++){

  num=num+(i+1)+':'+arr[t]+'<br/>'

}

odiv.innerHTML=num

/*//上面用到了while循环,并且在内部就直接判断了生成的数字是否在集合中存在

//所以,这里就不需要判断了

function pd(){

  for(var i=0i<arr.lengthi++){

    if(arr[i]===t){

      return true

    }else{

      return false

    }

  }

}

var bol=pd()//比较是否重复

if(bol){

  i--

  continue

}else{

  num=num+(i+1)+':'+t+'<br/>'

}*/

odiv.innerHTML=num

</script>

</body>

把上面不需要的去掉:

<body>

<div id='odiv'></div>

<script>

var odiv=document.getElementById('odiv')

var num=''

var arr=[] 

//修改成这样的:

//定义一个while循环,循环的条件是集合arr的子集少于4个

while(arr.length<4){

  var t=Math.floor(Math.random()*5)//生成随机数

  if(arr.indexOf(t)==-1){

   //如果t在集合arr中存在,indexOf会返回t在集合arr中的位置。

   //如果不存在,indexOf会返回-1

    arr.push(t)    //把生成的数字放进这个数组里

  }

}

for(var i=0i<=arr.lengthi++){

  num=num+(i+1)+':'+arr[t]+'<br/>'

}

odiv.innerHTML=num

</script>

</body>