如果使用随机数生成器,如果它已经出现一次,你怎么能阻止它出现呢?
以下是当前代码:
var random = Math.ceil(Math.random() * 24);
但这些数字不止一次出现。
答案 0 :(得分:3)
您可以使用一系列可能的值(我认为在您的情况下它将是24):
var values = [];
for (var i = 1; i <= 24; ++i){
values.push(i);
}
如果你想选择一个随机数,你可以这样做:
var random = values.splice(Math.random()*values.length,1)[0];
答案 1 :(得分:2)
如果你知道你想要多少个数字,那么很容易,首先创建一个数组:
var arr = [];
for (var i = 0; i <= 24; i++) arr.push(i);
然后你可以用这个小功能来改变它:
function shuffle(arr) {
return arr.map(function(val, i) {
return [Math.random(), i];
}).sort().map(function(val) {
return val[1];
});
}
并像这样使用它:
console.log(shuffle(arr)); //=> [2,10,15..] random array from 0 to 24
答案 2 :(得分:1)
您始终可以使用哈希表,在使用新号码之前,请检查它是否在那里。这对更大的数字有效。现在24岁,你总是可以随机播放阵列。
答案 3 :(得分:0)
您可以将生成的数字放在数组中,然后检查。如果找到该值,请再试一次:
var RandomNumber = (function()
{
// Store used numbers here.
var _used = [];
return {
get: function()
{
var random = Math.ceil(Math.random() * 24);
for(var i = 0; i < _used.length; i++)
{
if(_used[i] === random)
{
// Do something here to prevent stack overflow occuring.
// For example, you could just reset the _used list when you
// hit a length of 24, or return something representing that.
return this.get();
}
}
_used.push(random);
return random;
}
}
})();
您可以测试是否能够获得所有唯一值:
for(var i = 0; i < 24; i++)
{
console.log( RandomNumber.get() );
}
目前唯一的问题是,如果您尝试获得的随机数超过可以获得的数量(在本例中为24),则会出现堆栈溢出错误。