|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2008
Сообщений: 106
|
Генерация случайного числа от 1 до 29
Как это мне сгенерировать случайное число от 1 до 29, но исключая числа 10 и 20?
|
|
|||||
Модрон-ветеринар
|
|
|
|||||
Регистрация: Jul 2009
Сообщений: 28
|
А разве не так?
|
|
|||||
Модрон-ветеринар
|
Да, я проглядел в вопросе про исключение 10 и 20.
function myRand ():Number { var rand:Number = Math.ceil(Math.random() * 29); if (rand == 10 || rand == 20) { myRand (); } else { return rand; } } num = myRand (); Добавлено через 5 минут Вот распределение, которое дает функция: номер = 29, количество = 250 номер = 28, количество = 199 номер = 27, количество = 214 номер = 26, количество = 224 номер = 25, количество = 210 номер = 24, количество = 220 номер = 23, количество = 226 номер = 22, количество = 207 номер = 21, количество = 215 номер = 20, количество = 0 номер = 19, количество = 258 номер = 18, количество = 215 номер = 17, количество = 191 номер = 16, количество = 213 номер = 15, количество = 209 номер = 14, количество = 219 номер = 13, количество = 216 номер = 12, количество = 217 номер = 11, количество = 212 номер = 10, количество = 0 номер = 9, количество = 192 номер = 8, количество = 207 номер = 7, количество = 187 номер = 6, количество = 236 номер = 5, количество = 199 номер = 4, количество = 217 номер = 3, количество = 209 номер = 2, количество = 224 номер = 1, количество = 199 номер = 0, количество = 0 |
|
|||||
Регистрация: Mar 2008
Сообщений: 106
|
Спасибо!
А если вот так, то нормально это будет? var chislo:Number; while (chislo == null || chislo == 10 || chislo == 20) { chislo = Math.ceil(Math.random() * 29); } Mooncar, а я не понял у вас вот это про распределение! Последний раз редактировалось Сникерс; 28.10.2009 в 16:59. Причина: Надо поменять букву |
|
|||||
Модрон-ветеринар
|
Просто запустил функцию через setInterval и забил массив для проверки, насколько рандомность соблюдаться будет.
Да, через while компактнее будет, а с функцией можно повторно использовать. Выбор ваш. Последний раз редактировалось mooncar; 28.10.2009 в 17:08. |
|
|||||
Регистрация: Mar 2008
Сообщений: 106
|
Спасибо!
|
|
|||||
Регистрация: Jul 2009
Сообщений: 28
|
не правда. не попадут.
зато в вашем коде, когда rand выдает 10 или 20? num - undefined. Разве вы не проверяли? Добавлено через 21 минуту А как у вас для 0 получилось распределение 0? Функция random() же генерирует числа в промежутке [0;1). Последний раз редактировалось Actual; 28.10.2009 в 17:49. Причина: появился ещё вопрос |
|
|||||
Модрон-ветеринар
|
Проверял с распределением. Но оно не показывало кое-что.
Ошибки есть и у меня и у вас. Да, у вас с return'ом все нормально, но у вас 1 никогда не будет, а у меня, действительно, undefined бывает. Все-таки нужно , не то номер = 29, количество = 132 номер = 28, количество = 131 номер = 27, количество = 125 номер = 26, количество = 118 номер = 25, количество = 134 номер = 24, количество = 120 номер = 23, количество = 116 номер = 22, количество = 143 номер = 21, количество = 131 номер = 20, количество = 0 номер = 19, количество = 102 номер = 18, количество = 134 номер = 17, количество = 133 номер = 16, количество = 132 номер = 15, количество = 132 номер = 14, количество = 118 номер = 13, количество = 122 номер = 12, количество = 116 номер = 11, количество = 131 номер = 10, количество = 0 номер = 9, количество = 115 номер = 8, количество = 127 номер = 7, количество = 131 номер = 6, количество = 128 номер = 5, количество = 143 номер = 4, количество = 152 номер = 3, количество = 127 номер = 2, количество = 138 номер = 1, количество = 0 номер = 0, количество = 0 var TEST:Array = new Array(); for (i = 0; i < 30; i++) { TEST[i] = 0; } function myRand ():Number { var rand:Number = Math.ceil(Math.random() * 29); if (rand == 10 || rand == 20) { myRand (); } else { TEST[rand]++; return rand; } } id = setInterval(myRand, 1); test_btn.onRelease = function () { clearInterval(id); for (i in TEST) { trace ('номер = ' + i + ', количество = ' + TEST[i]); } } var TEST:Array = new Array(); for (i = 0; i < 30; i++) { TEST[i] = 0; } function myRand ():Number { var rand:Number = Math.ceil(Math.random() * 28)+1; if(rand == 10) rand = myRand(); if(rand == 20) rand = myRand(); TEST[rand]++; return rand; } //искомое число num = myRand (); id = setInterval(myRand, 1); test_btn.onRelease = function () { clearInterval(id); for (i in TEST) { trace ('номер = ' + i + ', количество = ' + TEST[i]); } } Добавлено через 9 минут Но вообще-то самая простая проверка дает нормальные результаты: Последний раз редактировалось mooncar; 28.10.2009 в 18:03. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
mooncar, когда ты рекурсивно функцию myRand() вызываешь, возвращаемое значение нужно в rand записывать. А то толку от этого вызова никакого.
|
Часовой пояс GMT +4, время: 21:54. |
|
« Предыдущая тема | Следующая тема » |
|
|