Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2013, 19:15
Интересующийся
Отправить личное сообщение для qwertyuiopoiuytrewq Посмотреть профиль Найти все сообщения от qwertyuiopoiuytrewq
 
Регистрация: 05.01.2013
Сообщений: 21

Генератор не повторяющихся случайных чисел, кроме...
Есть код, он генерирует случайные не повторяющийся числа, кроме какого/каких - нибудь в данном случае одного, он вроде работает корректно, но почему-то(правда очень редко, гораздо реже, чем без этого условия) генерирует 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>
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2013, 19:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Дзен-трансгуманист,
как вариант из вашего кода
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 );
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2013, 20:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Генерируйте через Дата.time()+рандом
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2013, 20:04
Интересующийся
Отправить личное сообщение для qwertyuiopoiuytrewq Посмотреть профиль Найти все сообщения от qwertyuiopoiuytrewq
 
Регистрация: 05.01.2013
Сообщений: 21

Спасибо, только хотелось бы понять механизм, почему так происходит, ведь он явно не игнорирует if, но и не всегда его выполняет?
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2013, 20:10
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

qwertyuiopoiuytrewq,
Хм - Вы же кол-во случайных ограничили и обрубили дробное, почему бы цифрам не повторяться?
У вас 0.2222 == 0.4444444 и тд
Берите более длинные цифры или регуляркой изымите запятушку тады не нужен Math.floor

alert(Math.floor((Math.random()+'').split(".").join(''))%5);

Последний раз редактировалось Deff, 23.01.2013 в 20:38.
Ответить с цитированием
  #6 (permalink)  
Старый 24.01.2013, 11:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от Deff
alert(Math.floor((Math.random()+'').split(".").joi n(''))%5);
в этом случае можно без Math.floor
alert((Math.random()+'').split(".").join('')%5);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен Java скрипт: поиск повторяющихся чисел black8558cat Javascript под браузер 8 26.06.2012 11:47
Несколько различных случайных чисел в диапозоне alexan0308 Общие вопросы Javascript 5 28.11.2011 20:47
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Генератор случайных чисел. Помогите написать. Teenager Я не знаю javascript 5 05.01.2011 19:15
Сложение случайных чисел user1111 Общие вопросы Javascript 14 08.11.2010 22:06