随机数提取器得到奇怪的值

时间:2014-12-02 20:05:36

标签: javascript html math random

我正在尝试获取一个介于两个给定值之间的随机整数,但尚未使用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控制台中看不到任何内容 可能是什么问题?

2 个答案:

答案 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)