Генератор не повторяющихся случайных чисел, кроме...
Есть код, он генерирует случайные не повторяющийся числа, кроме какого/каких - нибудь в данном случае одного, он вроде работает корректно, но почему-то(правда очень редко, гораздо реже, чем без этого условия) генерирует 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, время: 08:30. |