我正在尝试获取一个介于两个给定值之间的随机整数,但尚未使用javascript提取。 为此,我使用以下代码:
var extracted = [];
function rand(){
var from = document.getElementById('from').value;
var to = document.getElementById('to').value;
var number = Math.floor(from) + Math.floor(Math.random() * to);
var alreadyextracted = (extracted.indexOf(number) > -1);
if(alreadyextracted){
var maximum = Math.floor(to) - Math.floor(from);
var count = extracted.length;
if(count > maximum){document.getElementById('result').innerHTML='All numbers have been extracted.';}
else{rand();}
}
else{document.getElementById('result').innerHTML=number;
extracted.push(number);
if(extracted[0] == number){var content = number;}
else{var before = document.getElementById('got').innerHTML;
var content = number + ', ' + before;}
document.getElementById('got').innerHTML= content;
}
}
From: <input id="from" value="1">
To: <input id="to" value="10">
<input type="button" value="Extract" onclick="rand()">
<div id="result"></div>
<div id="desc">Already extracted numbers:</div>
<div id="got"></div>
如果我设置一个低于10的“from”值,它可以正常工作,但是,如果它更大,它会获得一个完全随机的整数并随机地说所有数字都被提取,即使它不是真的。
我在firefox控制台中看不到任何内容
可能是什么问题?
答案 0 :(得分:3)
你做错了。
使用从最小到最大的所有数字范围填充数组。
使用Fisher/Yates/Knuth shuffle混合数组。
根据需要抽出尽可能多的数字。
(由于我没有解决您的问题,因此无意包含任何代码)
答案 1 :(得分:2)
Spender没有错,但问题在于你生成随机数的方式:
var number = Math.floor(from) + Math.floor(Math.random() * to);
这不是在min和max之间生成数字的正确方法。这应该是:
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
使用spender提出的方法,然后使用此函数选择剩余集合中的元素(在这种情况下,min将为0,最大值为剩余元素的数量-1)