理想是火,点燃熄灭的灯。
跑步听歌到时候,把歌单调成了随机播放,
然后就联想到了一个问题,
如何保证在随机播放时,下一首和上一首不重复播放呢?
仔细想了一下,其实很简单,优化一下算法即可,
代码如下:
<!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; } }
作者: Bill 本文地址: http://biaoblog.cn/info?id=1604290140000
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇:关于各方面 杂七杂八的一些内容
下一篇:app首页返回键处理