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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.10.2009, 23:44
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 1  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
По умолчанию Не могу понять как принимается решение на основании нескольких условий

Знаю, что совсем глупый вопросы, но как не пытался менять выражения местами, втоое условие все равно не вызывается. Вот код:
Код AS3:
if (one == false && name.length == 0 || name.length < 4) {
	one = true;
	trace ("#1");
} else if (one == true && name.length == 0 || name.length < 4) {
	trace ("#2");
};
Перепробовал много раскладов и все равно первое условие выполняется всегда, а второе никогда. Помогите пожалуйсто разобраться. Хотя по идее, после того, когда первое условие выполнилось один раз, потом всегда должно выполняться второе. Но этого не происходит.

Старый 24.10.2009, 00:09
Lecosson вне форума Посмотреть профиль Отправить личное сообщение для Lecosson Найти все сообщения от Lecosson
  № 2  
Ответить с цитированием
Lecosson

Регистрация: Apr 2008
Сообщений: 80
Записей в блоге: 3
Попробуй для начала четко обозначить порядок проверок, например:
Код AS3:
if (  ( (one == false) && (name.length == 0) )  || (name.length < 4)  ) {
После этого, если не заработает, поясни какое условие в какой строке является "вторым", разрулим.

Старый 24.10.2009, 02:38
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 3  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Furinax, вам желательно для начала понять, что представляет из себя приоритет операторов. И, да, ставить скобки в случае необходимости.
И ещё маленький совет: сравнение типа b == true бессмысленно, ибо возвращает в точности значение b. Поэтому вместо b == ture лучше писать просто b, а вместо b == false писать !b. Где ! – оператор логического отрицания, переводит true в false и наоборот.

Старый 24.10.2009, 13:51
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 4  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Спасибо большое за то, что напомнили про приоритеты операторов и остальные советы. Дело было реально в точ, что отсутствовали скобки. Кароч просто переписал так:
Код AS3:
if (one == false && (name.length == 0 || name.length < 4)) {
	one = true;
	trace ("#1");
} else if (one == true && (name.length == 0 || name.length < 4)) {
	trace ("#2");
};
А потом подумал, а все равно же условие name.length == 0 || name.length < 4 так и так должно выполняться и переписал вот так:
Код AS3:
if (one == false && (name.length == 0 || name.length < 4)) {
	if (one == false) {
	one = true;
	trace ("#1");} else if (one == false) {
	trace ("#2");};
	};
Теперь все работает как надо.

Старый 24.10.2009, 14:29
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Твой второй код как раз не эквивалентен первому. Надо убрать в первом сравнении one == false. И в блоке else ты наверное хотел написать one == true
А если еще, как советовал SamFR, убрать бессмысленные == true и == false, то получится такая схема:
Код AS3:
if (name.length == 0 || name.length < 4) {
	if (!one) {
		one = true;
		trace ("#1");
	} else {
		trace ("#2");
	}
}
__________________
Поймай яблоко 2!


Последний раз редактировалось Zebestov; 24.10.2009 в 14:34.
Старый 24.10.2009, 14:41
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
И в первом условии достаточно проверить на то, что длинна меньше 4:
Код AS3:
if (name.length < 4) {
	if (!one) {
		one = true;
		trace ("#1");
	} else {
		trace ("#2");
	}
}

Старый 24.10.2009, 14:54
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
хха! ) точно
__________________
Поймай яблоко 2!

Старый 24.10.2009, 15:22
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 8  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Большое спасибо за советы, для меня они действительно ценные: теперь мой код не будет смотреться так ламерски

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

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

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


 


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


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