![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Привет комрады.
Столкнулся с проблемой в циклах. Сейчас покажу код и коментариями опишу проблемку. // Создаем новый массив _mapMask = []; _mapMask.length = MAP_HEIGHT_MAX; _f = MAP_HALF; for (var aw:int = 0; aw < 115; aw++) { trace(aw); //Вот на этом моменте итераторы показывают синромные данные тоесть идут в такт 00, 11 , 22, 33. trace(aq)// f++ _mapMask[aw] = []; _mapMask[aw].length = MAP_WIDTH_MAX; _f -= MCELL_HALF; for (var aq:int = 0; aq < f; aq++) { _mapMask[aw][aq] = STATE_CELL_FREE; //А вот уже тут показания расходятся aw = 57, aq=60 и тогдалее. trace(aw); trace(aq); //Не понятно почему так происходит, в начале первого цикла все итераторы равны нулю а вот уже во втором цикле начинаются с другого значения :( Может кто знает почему так происходит? Спасибо! } Последний раз редактировалось razerw; 29.06.2012 в 14:59. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А с чего они должны быть одинаковыми? О_О
Цикл aw идет от ноля до 115. На каждое изменение aw (итерацию на +1) проигрывается весь цикл aq от ноля до (!) f, которая к тому же изменяется в каждой итерации aw. О какой синхронности речь?
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
все верно во втором цикле я слушаю aw и aq которые увеличиваются на 1 при каждой итерации. Так вот вся соль втом что самого первое значение которое мне выдает trace это 57 и 60, а по сути то должно быть 1,1 2,2 3,3 и тогдалее.
Ведь в самом начале первого цикла когда я слушал aw и aq команда trace мне показывала 1,1 2,2 3,3 и тогдалее. Добавлено через 52 минуты тоесть как я понимаю во второй цикл aw и aq не с 0 а с 57 |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Один цикл ВЛОЖЕН в другой.
Когда aw==0, aq изменяется при каждой итерации вложенного цикла, так? То есть aw=0, aq=0 aw=0, aq=1 aw=0, aq=2 и тд. Затем цикл aq заканчивается и происходит итерация !внешнего" цикла aw, в котором цикл aq снова проходит от 0 до f: aw=1, aq=0 aw=1, aq=1 aw=1, aq=2 Это понятно? Но у Вас второй цикл ограничен переменной f, о которой в примере кода ничего не показано. Эта переменная у Вас увеличивается с каждой итерацией цикла aw (f++). То есть длина цикла aq (количество его итераций) тоже все время увеличивается. Происходит ли потом обнуление f из кода не видно. Цитата:
Но внутри цикла aq трейс естественно будет показывать текущее значение aw (оно одно на всем протяжении цикла aq) и разные значения aq, от ноля до f (которое равно aw+1) - 1.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 29.06.2012 в 16:18. |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Я немного по иначе представляю себе сложившуюся картину.
Начинается цикл aw aw=0 и увеличивается на 1 //в представленном коде видно переменную f++ которая находится сразу после тейсов в первомцикле aw f++ тоже ровна 0 и тоже увеличивается на единицу. //далее запускается цикл aq у которого условие f тоесть цикл отработает один рас, и после чего выйдит во внешний цикл aw. И картина будет повторяться и f будет увеличиваться тем самым задавая ритм внутренниму цикру aq. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Чем пытаться придумать, как работает цикл, может проще прочитать или написать нормальных трейсов?
Цитата:
for (var aq:int = 0; aq < 1; aq++) { //// здесь aw=0, f=1, aq=0 } //// здесь aw=0, f=1, aq=1 var f:uint = 0; for (var aw:int = 0; aw < 5; aw++) { trace("------------------------------------"); trace("Новый виток aw"); trace("aw="+aw, ", aq="+aq, ", f="+f); f++; for (var aq:int = 0; aq < f; aq++) { trace("---------------"); trace("aw="+aw, ", aq="+aq, ", f="+f); } trace("после цикла aq: aw="+aw, ", aq="+aq, ", f="+f); }
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 29.06.2012 в 19:08. |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
вот код
for (var aw:int = 0; aw < 115; aw++) { trace(aw); //вот здесь трейсы показывают 00, 10, 21, 32, 43, 54, 64. trace(aq); f++ _mapMask[aw] = []; _mapMask[aw].length = MAP_WIDTH_MAX; _f -= MCELL_HALF; for (var aq:int = 0; aq < aw; aq++) { // Задаем ячеке свободное состояние _mapMask[aw][aq] = STATE_CELL_FREE; trace(aw);//а вот здесь трейсы показывают 12 56, 16 56, 17 56. // почему так? вочему трейсы не начинаются так же как и в первом цикле 00, 10, 21, 32, 43, 54, 64. trace(aq); } |
|
|||||
|
По Вашему коду меня пугает, что трейсы идут 00, 10, 21, а не 0, 1, 2, 3, к примеру.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А то, что условие цикла aq < aw, а трейс в этом цикле выводит aw=12, aq=56, тебя не смущает?)))
Я просто не знаю, как реагировать на эту... информацию от автора...
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
я же и пишу чт отрейсы разное показывают ,
посмотрите на код ниже. for (var aw:int = 0; aw < 115; aw++) { trace(aw); //вот здесь трейсы показывают [0] [0], [1] [0], [2] [1], [3] [2], [4] [3], [5] [4], [6] [4]. trace(aq); f++ _mapMask[aw] = []; _mapMask[aw].length = MAP_WIDTH_MAX; _f -= MCELL_HALF; for (var aq:int = 0; aq < aw; aq++) { // Задаем ячеке свободное состояние _mapMask[aw][aq] = STATE_CELL_FREE; trace(aw);//а вот здесь трейсы показывают [12] [56], [16] [56], [17] [56]. // почему так? вочему трейсы не начинаются так же как и в первом цикле [0] [0], [1] [0], [2] [1], [3] [2], [4] [3], [5] [4], [6] [4]. trace(aq); } aw=15, aq=56 aw=16, aq=56 aw=17, aq=56 вот почему так происходит? почему трейсы из внутреннего цикла начинают показывать не с 0 Последний раз редактировалось razerw; 02.07.2012 в 10:48. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:22. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|