Просмотр полной версии : спросить:генератор случайных чисел AS2
Для создания Flash-викторины нужен генератор случайных чисел с неповторяющимися данными AS2. Прошу помощи.
Если диапазон достаточный, а количество запусков ограничено:
var RNDVALUES = []; //Здесь храним числа
RND = function (MIN, MAX)
{
//Получаем число
var RETVAL = Math.floor(Math.random() * (MAX - MIN) + MIN);
//Проверяем число на уникальность
for (var i = 0; i < RNDVALUES.length; i++)
{
if (RNDVALUES[i] == RETVAL)
{
RETVAL = RND (MIN, MAX);
break;
}
}
return RETVAL;
}
//Для примера
onEnterFrame = function ()
{
RNDVALUES.push(RND(0, 100));
trace (RNDVALUES);
}
Vertax, а зачем там нужна конструкция
(MAX - MIN) + MIN
ведь можно было б просто написать max (но тогда не учитывается нижняя граница)
ЗЫ. Надеюсь никто не против, что встрял в чужую тему, просто стало интересно.
У тебя вызов функции при выбори чисел 0-1000 происходит 3500-5000+ раз :).
Если задать диапазон чисел из каторых мы будем делать выбор например 0-100.
И при выборе числа исключать его из этого диапазона, то будет гораздо проще как мне кажется :).
Vertax, а зачем там нужна конструкция
Дык, если не с ноля начинать нужно, а например с 500.
А формула Math.random() * (MAX - MIN) + MIN. Математика блин.
У тебя вызов функции при выбори чисел 0-1000 происходит 3500-5000+ раз
Читай внимательно пост. Я сразу написал, что если диапазон достаточный, а количество запусков ограничено.
Если задать диапазон чисел из каторых мы будем делать выбор например 0-100.
И при выборе числа исключать его из этого диапазона, то будет гораздо проще как мне кажется
Если чисел так мало, то да, в твоих словах есть смысл. Но... ты когда нибудь участвовал (или просто смотрел) в различных розыгрышах и тд. Очень часто цифры 6+ знаков, а запусков всего 20-100.
Неважно сколько чисел главное чтобы хватило памяти:). Способ каторый я описал оптимальней в любом случае...
Правильнее просто геерировать рандомный диапазон и из него делать выбор
olexandr
24.04.2008, 16:23
согласен с qazwsx
мне кажется так будет наиболее оптимально
var count:Number = 100;
var arr:Array = new Array();
for (var i:Number = 0; i<count; i++) {
arr.push(i);
}
function getRnd() {
return arr.splice(Math.random()*(arr.length-1), 1);
}
for (var i:Number = 0; i<count; i++) {
trace(getRnd());
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.