Показать сообщение отдельно
Старый 11.01.2010, 14:39
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 10  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от Hauts Посмотреть сообщение
Код AS1/AS2:
var randoms = [];
function getRandomNum() {
	var rnd = Math.floor(Math.random()*1000);
	if (randoms[rnd] != true) {
		randoms[rnd] = true;
		return rnd;
	} else {
		return getRandomNum();
	}
}
for (var k = 0; k<100; k++) {
	trace(getRandomNum());
}
Примерно такое я имел в виду.
Этот способ нужно применять если количество возможных значений много больше чем возможное количество сгенерированных случайных чисел. Иначе можно превысить 256 уровней рекурсии. Даже без превышения будет много лишних вычислений.

Если значений не много, то лучше из массива выбирать:
Код AS1/AS2:
var array:Array = [ 1, 2, 3, 4, 5 ];
 
function getRandom():Number
{
	return array.splice(Math.floor(Math.random() * array.length), 1)[0];
}
 
var length:Number = array.length;
for (var i:Number = 0; i < length; i++)
{
	trace(getRandom());
}
upd: мой способ меня уже опередил


Последний раз редактировалось udaaff; 11.01.2010 в 14:41.