Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.06.2012, 18:06
dkart01 вне форума Посмотреть профиль Отправить личное сообщение для dkart01 Найти все сообщения от dkart01
  № 1  
Ответить с цитированием
dkart01

Регистрация: Apr 2012
Сообщений: 80
По умолчанию Не работает цикл, если в 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 массива и др. случаях?

Старый 19.06.2012, 18:14
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
1. Вы присваиваете значение i, если поставите i=1. А нужно указывать условие выполнения цикла. Присвоение не является условием.

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

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

Старый 19.06.2012, 18:58
dkart01 вне форума Посмотреть профиль Отправить личное сообщение для dkart01 Найти все сообщения от dkart01
  № 3  
Ответить с цитированием
dkart01

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

Старый 19.06.2012, 19:04
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
var arr:Array = ["арбуз", "дыня", "тыква", "помидор"];
for (var i = arr.length - 1;  i >= 0; i--) 
{
	 trace(arr[i]);
	 trace(i);
}
Это корректно и правильно. Не понимаю ваших волнений.
А если делать условием выполнения цикла i == 0, то цикл не выполнится ни разу - потому как i в начале не будет равно 0, следовательно, итераций не будет вообще.
__________________
Идите первым!

Старый 20.06.2012, 11:11
dkart01 вне форума Посмотреть профиль Отправить личное сообщение для dkart01 Найти все сообщения от dkart01
  № 5  
Ответить с цитированием
dkart01

Регистрация: Apr 2012
Сообщений: 80
Видимо, я неправильно читаю код. Волнения по поводу итераций, почему их не будет для кода ниже

Код 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, чтобы все в прямом порядке вывелось - арбуз, дыня, тыква, помидор


Последний раз редактировалось dkart01; 20.06.2012 в 11:15.
Старый 20.06.2012, 11:20
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Нет, не так. Условие проверяется при каждой итерации. Итерации продолжаются, пока оно выполняется. Как только оно перестает выполняться, итерации прекращаются. А оно при i == 0 не выполняется сразу, поэтому ничего и не происходит - цикл сразу и останавливается:

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

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

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


Последний раз редактировалось mooncar; 20.06.2012 в 12:07.
Старый 20.06.2012, 18:30
dkart01 вне форума Посмотреть профиль Отправить личное сообщение для dkart01 Найти все сообщения от dkart01
  № 7  
Ответить с цитированием
dkart01

Регистрация: Apr 2012
Сообщений: 80
Теперь понял!)

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

Старый 20.06.2012, 18:38
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Некоторым людям нравится помогать тем, кому интересно то же, что и им.
__________________
hauts.ru

Старый 20.06.2012, 19:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от dkart01 Посмотреть сообщение
Что вами движет?)
Нераскрывшийся педагогический талант. Тяга к мировой гармонии и глобальный перфекционизм
По секрету. Например, есть такие плюшки, что в процессе ответа могут раскрываться некоторые нюансы, доселе самому не очевидные. Залезть в доки сподвигает необходимость в 100% быть уверенным, что новичку отпишешься, не соврамши.
Еще в сложных случаях - дополнительная гимнастика для ума, чтобы не высохли.
__________________
Идите первым!


Последний раз редактировалось mooncar; 20.06.2012 в 19:22.
Старый 22.06.2012, 11:24
dkart01 вне форума Посмотреть профиль Отправить личное сообщение для dkart01 Найти все сообщения от dkart01
  № 10  
Ответить с цитированием
dkart01

Регистрация: Apr 2012
Сообщений: 80
Один человек сказал: Хочешь быть красивым - твори добро.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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