Просмотр полной версии : random без повторений
Здравствуйте.
Есть цикл при помощи которого грузятся картинки. Цикл проходит 5 раз (к примеру). В цикле картинки грузятся в случайном порядке при помощи Math.floor(Math.random ()* 5)
Проблема в том что Math.random за 5 раз выдаёт одинаковые цифры и грузятся одинаковые картинки..
Подскажите как можно сделать random без повторений?
Спасибо!
Division
24.01.2009, 17:45
Можно создать массив из пяти элементов [0,1,2,3,4] и перемешать его. Потом просто проходишь по нему и грузишь картинки.
Да! Как раз то что нужно! Как создать массив я знаю, а как можно перемешать его?
Division
24.01.2009, 17:49
Тебе не надо проходить по нему в случайном порядке. Тебе надо его перемешать. Несколько раз поменять случайные элементы друг с другом местами.
глянь тут (http://letmegooglethatforyou.com/?q=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%88%D0%B0%D1%82%D1%8C+%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2)
Тебе не надо проходить по нему в случайном порадке. Тебе надо его перемешать.
Да, я понял. Глупость написал и удалил.
Несколько раз поменять случайные элементы друг с другом местами.
Спасибо за подсказку, буду думать.
Ну, вообще-то я уже поднимал данный вопрос.
(Надо поискать)
Искал, что-то не нашел... И как нашел решение? Если глянуть темы через твой профиль найду?
Добавлено через 5 часов 4 минуты
Если кому-нибудь будет полезным вот перемешивание элементов в массиве
Array.prototype.shuffle = function( b )
{
var i = this.length, j, t;
while( i )
{
j = Math.floor( ( i-- ) * Math.random() );
t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];
this[i] = this[j];
this[j] = t;
}
return this;
};
Как применить
var a = new Array(1,2,3,4,5);
alert( a.shuffle() );
Источник (http://php-doc.ru/cms_fpublisher/javascript_develop/new695)
Добавлено через 5 часов 5 минут
В принципе вариант работающий. Но хотелось бы подобный рандом без массива. Кто с подобным сталкивался? Прошу подсказать.
Жень Шень
26.01.2009, 12:29
...Но хотелось бы подобный рандом без массива...
Без массива не знаю. Нужно ведь запоминать номера как-то.
Но без перемешивания запросто:
// Задаем кол-во картинок
var k:Number = 5;
var s = [];
/ заполняем массив. Без него, ну, ни как...
for (var i:Number = 0; i<k; i++) {
s[i] = [i+1];
}
while (s.length) {
var p = s.splice(random(s.length), 1);
trace(p);
}
chingachgoog
26.01.2009, 12:57
http://flasher.ru/forum/showthread.php?p=779587#post779587
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.