前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >生成随机数的优化

生成随机数的优化

作者头像
biaoblog.cn 个人博客
发布2022-08-11 19:01:31
发布2022-08-11 19:01:31
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

代码如下:

代码语言:javascript
代码运行次数:0
复制
<!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
代码运行次数:0
复制
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
代码运行次数:0
复制
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
代码运行次数:0
复制
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
代码运行次数:0
复制
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;
      }
 }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档