![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 06.05.14]
|
Выбираем некий случайны элемент, затем надо повторять эту функцию = кол элементов в массиве, но при этом выбирать каждый раз новый, тоесть те ктороые были выбраны должны отсеятся
как такое организовывается:? П.с. вот моя методика, но почему то иногда удаляется не тот элемент, тоесть предидущий остается. В чем может быть ошибка? Последний раз редактировалось in4core; 01.06.2010 в 21:52. |
|
|||||
|
Модрон-ветеринар
|
После выбора случайного элемента просто удаляй его из массива и всё. Именно удаляй, а не обнуляй или не делай неопределенным:
http://www.flasher.ru/forum/showthread.php?t=138239 чтобы размер массива стал меньше на единицу. При желании первоначальный массив можно сохранить, а для операций всех этих использовать его копию. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
|
Модрон-ветеринар
|
Вероятно "толку нет" не в алгоритме, а в реализации.
Прекрасный алгоритм: var arr:Array = [1,2,3,4,5,6]; this.onEnterFrame = function () { trace('Длина массива = ' + arr.length); if (arr.length != 0) { var randomIndex:Number = Math.floor(Math.random() * arr.length); var randomElement = arr[randomIndex]; trace('randomIndex = ' + randomIndex); trace('randomElement = ' + randomElement); trace('-------------------------'); arr.splice(randomIndex, 1); } else { delete this.onEnterFrame ; trace('-------------------------'); trace('Конец массива'); } }; |
|
|||||
|
[+4 06.05.14]
|
Та это все понятно, задача немного сложнее, чем я расписал просто. Видимо косяки в другом. Задача такая :
есть 2 массива данных из XML. Допустим title атрибутов и url атрибутов. Автоматом перейдя на кадр, запускается рандом. выбирающий некий элемент из массива 1. А далее, при нажатии на кнопку идет проверка, если текст в поле соотв тексту массива 2, то в память кидаем +1 для некой переменной. Затем этот элемент удаляется, остается новый массив 1 , соответсвующий массиву 2, и снова опреция повторяется, до тех пор пока массив не будет разрушен. Вот такая не получается бойда, почему то массивы то расходятся, то их значения спешат на 1 и т.д.... Добавлено через 5 минут На данный момент это безобразие ( кусок только) выглядет так, if (_global.ORDER != "Random") { defaulT(); } else { defaulT1(); } function defaulT() { tf33.text = arr[0]; } btn.onRelease = somefunction; somefunction() { if (a == true && b == false) { var ab = Math.floor(Math.random() * (arr.length - 1)); if (arr.length >= 1 && arr.length < _global.MAX - 1) { tf33.text = arr[ab]; if (tf_answer.text.toString() == arr2[ab]) { SUPER_COUNT++; } } else { tf33.text = arr[0]; if (tf_answer.text.toString() == arr2[0]) { ab = 0; SUPER_COUNT++; } } trace(arr); trace(arr2); //trace(SUPER_COUNT); arr.splice(ab,1); arr1.splice(ab,1); arr2.splice(ab,1); //trace(arr); } } |
|
|||||
|
Модрон-ветеринар
|
Ошибки в определении диапазона выборки? (arr.length - 2 зачем? )
|
|
|||||
|
Модрон-ветеринар
|
Почему тогда первоначальный диапазон равен arr.length - 1 ?
Добавлено через 6 минут Чтобы получить случайный индекс, нужно использовать Последний раз редактировалось mooncar; 01.06.2010 в 23:43. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:32. |
|
|
« Предыдущая тема | Следующая тема » |
|
|