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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.09.2008, 16:28
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
По умолчанию While in while going to fail...

Добрый день)
Простенький код:
Код:
var i:int=10;
while (i--) {}
trace(i); //0
Отлично! А если такой:
Код:
var offset:int = new int(13);
var i:int=Math.floor(640/offset);
var j:int=Math.floor(480/offset);
while (i--){
while (j--){

}
}
о_О О боже, он зациклился! Почему такое происходит? Даже предположить не могу... Причем
Код:
var offset:int = new int(13);
var i:int=Math.floor(640/offset);
var j:int=Math.floor(480/offset);
for (i; i>0; i--){
for (j; j>0; j--){
}
}
Работает идеально

Старый 16.09.2008, 16:39
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 2  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Быть может потому что -1 вообщем-то тоже true?
upd: Хотя не то. Вообщем я тоже не въехал...
upd2: Нет я втыкаю. Всё таки да. Всё что не нуль это тру - вот твоя ошибка)
__________________
while(1) {}


Последний раз редактировалось Division; 16.09.2008 в 16:50.
Старый 16.09.2008, 16:57
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 3  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
потому что после одного прогона внутреннего while j будет -1 и далее в -бесконечность

Старый 16.09.2008, 17:13
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 4  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Потому-что int. 2147483647 + 1 = -2147483648 и наоборот
Операция декремента это не условие.

Старый 16.09.2008, 17:18
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
В for сначала проверяется условие, а потом выполняется декремент при успешности, а в while всегда.
Код:
var i:int=4;
var j:int=4;
for (i; i>0; i--) {
	for (j; j>0; j--) {
		trace (i,j);
	}
	trace (i,j)
}
Код:
var i:int=4;
var j:int=4;
while (i--) {
	while (j--) {
		trace (i,j);
		if (i==0 || j < -20) {
			trace ("--")
			break;
		}

	}
	if (i==0 || j < -20) {
		trace ("-")
		break;
	}
}
trace (i,j);
Поэтому после первого выполнения условия j == 0 (при i == 3), потом был еще один декремент и j стало равным -1 и соотвественно при i == 2, второй раз условии стало недостижимым.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 16.09.2008 в 17:21.
Старый 16.09.2008, 17:19
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 6  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Цитата:
Потому-что int. 2147483647 + 1 = -2147483648 и наоборот
Операция декремента это не условие.
Нет, всё-таки бесконечный цикл получается из-за того что внутренний while зацикливается. Условием здесь служит не постфиксный оператор, а переменная j, которая приводится к false потому что она меньше нуля. Во как (:
__________________
while(1) {}

Старый 16.09.2008, 17:25
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Сообщение от iNils
В for сначала проверяется условие, а потом выполняется декремент при успешности, а в while всегда.
Опа, вот этой фразы бы хватило... Спасибо
Почему то думал, что раз условие не выполнилось, то дикрементация не будет выполняться... а с чего я это решил, это же не тело цикла. Вобщем, всем спасибо!

Кстати, оффтоп: а когда вы проставляете цитаты, как вы сохраняете ники? Копипаст и руками вставляете ники, если нужен "кусок" чужого поста, или есть какая то кнопка?

Старый 16.09.2008, 17:29
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 8  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Цитата:
Сообщение от Division Посмотреть сообщение
Нет, всё-таки бесконечный цикл получается из-за того что внутренний while зацикливается. Условием здесь служит не постфиксный оператор, а переменная j, которая приводится к false потому что она меньше нуля. Во как (:
while (i--){
while (j--){
Тут вообще нет условия.

Старый 16.09.2008, 17:37
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 9  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Цитата:
Сообщение от †‡Paladin‡† Посмотреть сообщение
while (i--){
while (j--){
Тут вообще нет условия.
До меня не доходит. Как это нету?
Ведь то же самое было бы
Код:
while (i--!=0){
while (j--!=0){
__________________
while(1) {}

Старый 16.09.2008, 17:42
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 10  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Цитата:
Сообщение от Division Посмотреть сообщение
До меня не доходит. Как это нету?
Ведь то же самое было бы
Код:
while (i--!=0){
while (j--!=0){
предположим, что мы написали-бы
Код:
var bool:Boolean = true;
while (bool) {
}
Как Вы считаете как скоро while решит сравнить булеву переменную с 0?

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

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

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


 


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


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