生成随机数的优化

2022-08-11 19:01:31 浏览数 (1)

跑步听歌到时候,把歌单调成了随机播放,

然后就联想到了一个问题,

如何保证在随机播放时,下一首和上一首不重复播放呢?

仔细想了一下,其实很简单,优化一下算法即可,

代码如下:

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button onclick="SetRandom()">生成</button>
    <div id="box"></div>
  </body>
</html>

<script>
  let PreNum = null;
  let box = document.getElementById("box");
  function SetRandom() {
    let NowNum = Math.floor(Math.random() * 10);
    if (NowNum === PreNum) {
      console.log("重复了");
      SetRandom();
    } else {
      PreNum = NowNum;
      box.innerHTML = NowNum;
    }
  }
</script>

仔细看看代码实现,其实还是蛮简单的,就是做一个简单的递归,存储两个变量(now,pre)随机数,

每次生成进行比对,如果重复那么就再生成一次,直到不重复,然后就实现了~

另附一些随机数范围的计算公式:

1)min ≤ r ≤ max (一般这种比较常见)

2)min ≤ r < max

3) min < r ≤ max

4)min < r < max

一、min ≤ r ≤ max

代码语言:javascript复制
function RandomNumBoth(Min,Max){
      var Range = Max - Min;
      var Rand = Math.random();
      var num = Min   Math.round(Rand * Range); //四舍五入
      return num;
}

二、min ≤ r < max

代码语言:javascript复制
function RandomNum(Min, Max) {
      var Range = Max - Min;
      var Rand = Math.random();
      var num = Min   Math.floor(Rand * Range); //舍去
      return num;
}

三、min < r ≤ max

代码语言:javascript复制
function RandomNum(Min, Max) {
      var Range = Max - Min;
      var Rand = Math.random();
      if(Math.round(Rand * Range)==0){       
        return Min   1;
      }
      var num = Min   Math.round(Rand * Range);
      return num;
}

四、min < r < max 

代码语言:javascript复制
function RandomNum(Min, Max) {
      var Range = Max - Min;
      var Rand = Math.random();
      if(Math.round(Rand * Range)==0){
        return Min   1;
      }else if(Math.round(Rand * Max)==Max)
      {
        index  ;
        return Max - 1;
      }else{
        var num = Min   Math.round(Rand * Range) - 1;
        return num;
      }
 }

0 人点赞