Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   random без повторов (http://www.flasher.ru/forum/showthread.php?t=141029)

otlichnic 13.06.2010 23:48

random без повторов
 
Плиз, помогите пожалуйста.
Есть код:
Код:

var random_arr:Array = new Array();

function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}

for (var i = 0; i < 10; i++) {
var n:Number = randRange(1, 50);
random_arr.push(n);
trace(random_arr);
}

Мне нужно, чтобы random_arr не содержал в себе повторяющиеся числа...
Спасибо!

rainbowrussia 14.06.2010 00:40

Внутри цикла организуйте еще один вложенный цикл от 0 до i-1 в котором проверяйте, не заносили ранее ли в массив очередное сгенерированное число.

Хемуль 14.06.2010 17:48

Если речь идёт о том, чтобы сгенерировать последовательность случайных целых чисел от MIN_VALUE до MAX_VALUE и выбрать из них NUM_SELECTED_VALUES значений, то можно так:
Код AS1/AS2:

var MIN_VALUE:Number = 1;
var MAX_VALUE:Number = 50;
var NUM_SELECTED_VALUES:Number = 10;
 
var tempArray:Array = new Array();
var resultArray:Array = new Array();
 
for (var i:Number = 0; i <= MAX_VALUE - MIN_VALUE; i++)
{
        tempArray.push(MIN_VALUE + i);
}
 
while (resultArray.length < NUM_SELECTED_VALUES)
{
        resultArray.push(tempArray.splice(randRange(0, tempArray.length - 1), 1));
}
 
function randRange(min:Number, max:Number):Number
{
        return Math.round(Math.random() * (max - min)) + min;
}

Чтобы проверить результат, можно ниже дописать что-то вроде:
Код AS1/AS2:

for (var j:Number = 0; j < resultArray.length; j++)
{
        trace("resultArray[" + j + "]: " + resultArray[j]);
}


otlichnic 14.06.2010 23:10

Суппер! То что нужно! Огромное Спасибо!

Cosmobomja23 31.08.2011 03:57

Вот такой вариант использую у себя, всё прекрасно работает.
Код AS1/AS2:

var selectFrom = ["Ог1", "Ог2", "Ог3"];
Контент.Фото2.Маска.gotoAndPlay(selectFrom[Math.floor(Math.random()*selectFrom.length)]);

В данном случае код выбирает эффект для перехода между фотографиями, но часто случаются повторы одинаковых переходов подряд, даже по 3 раза)

Помочь можете???
Нужно дописать условие, которое будет сравнивать выбор с предыдущим и запрещать его выбирать, если они совпадают. Походу нужен массив, но я не разобрался еще с ним.


Часовой пояс GMT +4, время: 16:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.