![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 4
|
День добрый.
Краткое описаниее проблемы: Есть массив currentItems, в котором есть какие-то случайные числовые значения. Его надо присвоить трем переменным и перемешать каждую из них в случайном порядке. Реализовано так: для каждой из переменных получаю массив со случайными индексами от 1 до 1000 (getIndexes()), после чего эти же переменные отдаю на сортировку (sortArray()). А после того, как вывожу получившийся результат (после трех вызовов sortArray()), все переменные принимают значение последнего вызова функции sortArray(). Причем, если выводить внутри самой sortArray(), то все нормально. var currentItems:Array = new Array();// Select items, that will use in the game. var items1:Array = new Array(); var items2:Array = new Array(); var items3:Array = new Array(); var count = 22; function formArray(num:Number) { for (i = 0; i < num; i++) { //trace(currentItems[i]); currentItems[i] = random(count); } } function getIndexes(num:Number) { var indexes:Array = new Array(); for (i = 0; i < num; i++) { indexes[i] = random(1000); //trace(i); } return indexes; } function sortArray(inp:Array){ var tmp:Number = new Number(); var sortArr = currentItems; for (i = 0; i < inp.length; i++) { //trace(""); for (k = i; k < inp.length; k++) { if (inp[k] < inp[i]) { tmp = inp[i]; inp[i] = inp[k]; inp[k] = tmp; tmp = sortArr[i]; sortArr[i] = sortArr[k]; sortArr[k] = tmp; } } } trace("sortArr: " + sortArr); return sortArr; } formArray(9); trace("Array: "+ currentItems); trace(""); trace("Get random indexes"); items1 = getIndexes(currentItems.length); items2 = getIndexes(currentItems.length); items3 = getIndexes(currentItems.length); trace(items1); trace(items2); trace(items3); trace("Sorted indexes"); items1 = sortArray(items1); items2 = sortArray(items2); items3 = sortArray(items3); trace(items1); trace(items2); trace(items3); Array: 18,13,3,12,12,5,20,21,16 Get random indexes 17,924,517,925,887,321,758,237,492 440,773,456,730,540,370,82,483,968 831,138,374,541,31,507,194,529,48 Sorted indexes sortArr: 18,21,5,16,3,20,12,13,12 sortArr: 12,20,18,5,13,3,16,21,12 sortArr: 13,12,20,16,18,3,21,5,12 13,12,20,16,18,3,21,5,12 13,12,20,16,18,3,21,5,12 13,12,20,16,18,3,21,5,12 Причем если выводить значения переменных после каждого вызова функции, то выводятся адекватные значения. Но после того как функция вызвана 3 раза, все переменный берут значения последнего вызова. items1 = sortArray(items1); trace(items1); items2 = sortArray(items2); trace(items2); items3 = sortArray(items3); trace(items3); trace(""); trace(items1); trace(items2); trace(items3); Array: 14,15,14,15,16,18,19,2,4 Get random indexes 802,963,768,426,203,828,752,458,658 184,43,693,465,677,591,421,321,99 632,947,952,722,619,849,559,72,87 Sorted indexes sortArr: 16,15,2,4,19,14,14,18,15 16,15,2,4,19,14,14,18,15 sortArr: 15,15,16,18,14,4,14,19,2 15,15,16,18,14,4,14,19,2 sortArr: 19,2,14,14,15,18,4,15,16 19,2,14,14,15,18,4,15,16 19,2,14,14,15,18,4,15,16 19,2,14,14,15,18,4,15,16 19,2,14,14,15,18,4,15,16 Есть способ заствить переменные принимать реально возвразаемые значения функции, а не ее последнего вызова? Спасибо всем, кто откликнется. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Сложные типы передаются по ссылке, а не по значению.
|
|
|||||
|
Регистрация: Apr 2010
Сообщений: 4
|
Большое спасибо, не знал.
Проблема решена. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|