如何生成唯一的随机数



我试图在两个数字之间生成5个唯一的随机数。第六个数字是另一组数字之间的随机数,但它不必是唯一的。我试图通过将第一个随机生成的数字放在数组中来确保每个数字的唯一性。

然后将每个后续随机生成的数字与该数组中的数字进行核对。任何与数组中的数字匹配的生成的数字将被丢弃,并生成一个新的数字,直到找到与数组中任何数字都不匹配的数字为止。我的代码不工作,因为它偶尔会产生重复。

如何修复?

https://jsfiddle.net/L3h0rf5q/

var btnGen = document.getElementById('generate');
var fiveNum = document.getElementById('fiveNums');
var lastNum = document.getElementById('lastNum');
btnGen.addEventListener('click', function () {

let ranNum;

let firstFive = "";
let pb = "";
let oldNum;
ranNum = GenerateNumbers();
ranNum.sort(
(a, b) => {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
}
);
for(let i=0; i<ranNum.length; i++){
if(i<ranNum.length - 1){

if(ranNum[i].toString().length<2){
firstFive += "0" + ranNum[i].toString() + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;"
}else{
firstFive += ranNum[i].toString() + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;" + "&nbsp;"
}

}else{
if(ranNum[i].toString().length<2){
pb = "0" + ranNum[i].toString();
}else {      
pb = ranNum[i].toString(); 
}
}
fiveNum.innerHTML = firstFive;
lastNum.innerHTML = pb;
}

});
function GenerateNumbers() {
let randomNums = [];
let selectedNums = [];        
let newNum = undefined;
for (let i = 0; i < 6; i++) {
if (i == 0) {
newNum = Math.floor(Math.random() * 75) + 1              
randomNums[i] = newNum;
selectedNums.push(newNum);

} 
if (i >0  && i < 5){            

while (selectedNums.includes(newNum)) {                
newNum = Math.floor(Math.random() * 75) + 1
} 

randomNums[i] = newNum;
//add to an array
selectedNums.push(newNum);

} 
if (i == 5) {
randomNums[i] = Math.floor(Math.random() * 42) + 1
}
}      

return randomNums;
}
<div style="margin-left:20%; width:500px; font-weight:bold; font-size:30px;">
<button id="generate" style="margin-left:36%">Generate Numbers</button>
<br><br>
<div>
<label style="margin-left:20%">Generate Numbers</label>
<br>
<div style="background-color:black">
<span id="fiveNums" style="margin-left: 10%; width:80%; color:blue;"></span>
<span id="lastNum" style="color:blue;"></span>
</div>
</div>

方法是创建一个包含所有可能值的数组,对其进行洗牌,然后获取其中的5个(对于您想要的额外值,只需单独计算)。如果需要,可以使用纯javascript:

function shuffle(arr) {
let i = arr.length;
while(i != 0) {
let j = Math.floor(Math.random() * i--);
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
//fill arr with all possible values
var arr = [];
for(var i = 50; i <= 100; i++) arr.push(i);
//shuffle
shuffle(arr);
//grab 5
console.log(arr.slice(-5));
//and the extra one
console.log(Math.floor(Math.random() * 76) + 75);

但是用random .js来做会好很多:

console.log(randoSequence(50, 100).slice(-5));//first five
console.log(rando(75, 150));//the other one
<script src="https://randojs.com/2.0.0.js"></script>

最新更新