Генератор не повторяющихся случайных чисел, кроме...
Есть код, он генерирует случайные не повторяющийся числа, кроме какого/каких - нибудь в данном случае одного, он вроде работает корректно, но почему-то(правда очень редко, гораздо реже, чем без этого условия) генерирует 0, скажите пожалуйста, из-за чего это может быть
var x, a=[], check=0;
function randomize(x) {
a[x]=Math.floor(Math.random()*5);
for(var j=0; j<x; j++){
if(a[x]==check||a[x]==a[j]){randomize(x)}
}
}
for(var i=0; i<=5; i++){
randomize(i);
}
function test(x){
x.style.display='none';
for(var d=0;d<4;d++){alert(a[d])}}
<div onclick='test(this)' style='display:block'>Begin</div> |
Дзен-трансгуманист,
как вариант из вашего кода
function rand ( min, max, except ) {
var number = except;
while (number == except) {
number = Math.floor( Math.random() * ( max + 1 - min ) + min );
}
return number;
}
var test = [];
while ( test.length < 20 ) {
test.push( rand( 1, 5, 4 ) ); // от 1 до 5 включительно, но кроме 4
}
alert( test );
|
Генерируйте через Дата.time()+рандом
|
Спасибо, только хотелось бы понять механизм, почему так происходит, ведь он явно не игнорирует if, но и не всегда его выполняет?
|
qwertyuiopoiuytrewq,
Хм - Вы же кол-во случайных ограничили и обрубили дробное, почему бы цифрам не повторяться? У вас 0.2222 == 0.4444444 и тд Берите более длинные цифры или регуляркой изымите запятушку тады не нужен Math.floor
alert(Math.floor((Math.random()+'').split(".").join(''))%5);
|
Цитата:
alert((Math.random()+'').split(".").join('')%5);
|
| Часовой пояс GMT +3, время: 14:18. |