Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не работает цикл, если в for i=0 (http://www.flasher.ru/forum/showthread.php?t=181264)

dkart01 19.06.2012 18:06

Не работает цикл, если в for i=0
 
1) Есть цикл работающий

Код AS1/AS2:

var arr:Array = ["арбуз", "дыня", "тыква", "помидор"];
for (var i=arr.length-1; i>=0; i--) {
        trace(arr[i]);
        trace(i);
}

Если заменить i>=0 на просто i=0, то скрипт не работает.

2) Правда ли, что надо опасаться циклов for in,
так как они могут давать непредсказуемые результаты после Reversa массива и др. случаях?

Hauts 19.06.2012 18:14

1. Вы присваиваете значение i, если поставите i=1. А нужно указывать условие выполнения цикла. Присвоение не является условием.

Зачем вам это? Чего хотите добиться?

2. Все результаты закономерны. Но могут быть непредсказуемы для вас из-за незнания/непонимания. Опасаться циклов for in не нужно. Но нужно использовать их разумно.

dkart01 19.06.2012 18:58

1) Хотел бы добиться условия, чтобы цикл проходил с конца массива до начального элемента.
То есть, если брать пример, когда счётчик достигал бы 0 номера, то цикл останавливался. В принципе, реализовал это через >=, но не знаю насколько это корректно.

mooncar 19.06.2012 19:04

Код AS1/AS2:

var arr:Array = ["арбуз", "дыня", "тыква", "помидор"];
for (var i = arr.length - 1;  i >= 0; i--)
{
        trace(arr[i]);
        trace(i);
}

Это корректно и правильно. Не понимаю ваших волнений.
А если делать условием выполнения цикла i == 0, то цикл не выполнится ни разу - потому как i в начале не будет равно 0, следовательно, итераций не будет вообще.

dkart01 20.06.2012 11:11

Видимо, я неправильно читаю код. Волнения по поводу итераций, почему их не будет для кода ниже

Код AS1/AS2:

for (var i = arr.length - 1;  i == 0; i--)

Я читаю как:
1) начинать цикл с var i, которая равняется количество элементов минус 1 (так как в массиве есть 0 элемент)
2) далее закончить когда i==0
3) уменьшать на 1 еденицу значение счетчика.

А Flash действительно не обрабатывает такой код, как я думаю...

Добавлено через 2 минуты
4_а) Подскажите, а как организовать вывод массмва через for in, чтобы все в прямом порядке вывелось - арбуз, дыня, тыква, помидор

mooncar 20.06.2012 11:20

Нет, не так. Условие проверяется при каждой итерации. Итерации продолжаются, пока оно выполняется. Как только оно перестает выполняться, итерации прекращаются. А оно при i == 0 не выполняется сразу, поэтому ничего и не происходит - цикл сразу и останавливается:

1) начинать цикл с var i, которая равняется количество элементов минус 1 (так как в массиве есть 0 элемент)
2) проверить условие, и если оно истинно, выполнить итерацию
3) уменьшать на 1 единицу значение счетчика.

Насчет 4) подсказать не могу. Частенько использую for in, но не в случаях, подобным вашему*. Думается, что тут задавать порядок обхода массива лучше все же, не полагаясь на алгоритм for in, а явно задавая текущие индексы.

------------------------
*for in удобен, например, когда используется ассоциативный массив и значения и/или порядок индексов по алгоритму не определен (пример - рандомно на поле добавляются юниты в игре).

dkart01 20.06.2012 18:30

Теперь понял!)

Вы так здорово отвечаете на вопросы и быстро и подробно, что даже диву даешься. Что вами движет?) Вам же деньги не платят за это?

Hauts 20.06.2012 18:38

Некоторым людям нравится помогать тем, кому интересно то же, что и им.

mooncar 20.06.2012 19:14

Цитата:

Сообщение от dkart01 (Сообщение 1085324)
Что вами движет?)

Нераскрывшийся педагогический талант. Тяга к мировой гармонии и глобальный перфекционизм
По секрету. Например, есть такие плюшки, что в процессе ответа могут раскрываться некоторые нюансы, доселе самому не очевидные. Залезть в доки сподвигает необходимость в 100% быть уверенным, что новичку отпишешься, не соврамши.
Еще в сложных случаях - дополнительная гимнастика для ума, чтобы не высохли. :)

dkart01 22.06.2012 11:24

Один человек сказал: Хочешь быть красивым - твори добро.

Помогая, вы делаете доброе дело, а добрые дела 100% вам в жизни помогут!


Часовой пояс GMT +4, время: 17:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.