Показать сообщение отдельно
Старый 09.01.2007, 15:38
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от iNils
Код:
var arrayA:Array = new Array (0, 1, 2, 3, 4, 5, 6);
var arrayB:Array = arrayA.concat()
for (var i:Number = 0; i < arrayA.length; i++) {
	var rnd:Number = Math.floor (Math.random () * arrayB.length);
	var del:Array = arrayB.splice (rnd, 1);
	trace (arrayA[del]);
}
Уважаемый iNils, извините пож. но почему этот код выводит то что хотелось и компилятор не ругается?
Если del это Array, то что такое arrayA[del]?

Я бы так сделал:
Код:
//исходный массив
var myArr:Array = new Array (0, 1, 2, 3, 4, 5, 6);
// копия 
var arr:Array = myArr.concat();
//длинна массива, чтобы не искать ее лишний раз
var num:Number = arr.length;
while ( num > 0 ){
	// случайный индекс
	var rnd:Number = Math.floor (Math.random () * num );
	// выдергиваем элемент с этим индексом из массива
	trace (arr.splice( rnd, 1 ) );
	// длинна массива уменьшилась
	num--;
}
PS - только что заметил вторую страницу. Вопрос все равно остался.
Автор, а повторения кстати неизбежны.
Имеем ряд 1,2,3
Первое перемешивание 2,3,1
Второе перемешивание 1,3,2
цифра 1 повторилась - все как в жизни, так бывает.
Если вам нужно избежать такой ситуации, надо исключать последний выпавший номер из нашей "лотереи".


Последний раз редактировалось Kikasso; 09.01.2007 в 16:04.