一个前端,爱跑步、爱吉他、爱做饭、爱生活、爱编程、爱南芳姑娘,爱我所爱。世间最温暖又无价的是阳光、空气与爱,愿它们能带你去更远的地方。

  • 文章
  • 心情
  • 照片墙
  • 留言板
  • 工具
  • 友链
  • biaoblog

    专注web开发技术分享

    生成随机数的优化

    技术 114 2020-11-02 12:09

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

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

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

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

    代码如下:

    <!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

    function RandomNumBoth(Min,Max){
          var Range = Max - Min;
          var Rand = Math.random();
          var num = Min + Math.round(Rand * Range); //四舍五入
          return num;
    }
    

    二、min ≤ r < max

    function RandomNum(Min, Max) {
          var Range = Max - Min;
          var Rand = Math.random();
          var num = Min + Math.floor(Rand * Range); //舍去
          return num;
    }
    

    三、min < r ≤ max

    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 

    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