跑步听歌到时候,把歌单调成了随机播放,
然后就联想到了一个问题,
如何保证在随机播放时,下一首和上一首不重复播放呢?
仔细想了一下,其实很简单,优化一下算法即可,
代码如下:
代码语言: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;
}
}