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

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

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

Регистрация: Jun 2010
Сообщений: 120
По умолчанию Помогите, пожалуйста, найти ошибку в коде.

Имеется такая задача: даны два текстовых поля и две кнопки. Вводим в поле vvod какое-нибудь число. При нажатии на кнопку btn1 идет проверка есть ли данное число в массиве. Ответ записывается в поле otvet. Кнопка btn2 служит для очистки поля otvet.
Вот AS-код:

Код AS3:
var massiv:Array = ["123000", "123456", "908070"];
 
btn1.addEventListener(MouseEvent.CLICK, proverka);
 
function proverka(event:MouseEvent):void
{
	for (var i:int = 0; i < massiv.length; i++)
	{
		if (massiv[i] == vvod.text)
		{
			otvet.text = "Верный пароль";
		}
                else
		{
			otvet.text = "Неверный пароль"
		}
 
	}
}
 
btn2.addEventListener(MouseEvent.CLICK, cleaning);
 
function cleaning(event:MouseEvent):void
{
	otvet.text = "";
}
Собственно проблема заключается в том, что при вводе в поле vvod верного числа, постоянно выводит ответ "Неверный пароль". Вроде бы, код верный.


Последний раз редактировалось goldlider; 22.10.2010 в 18:20.
Старый 22.10.2010, 17:50
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
А что в trace'е пишется?
Код AS3:
function proverka(event:MouseEvent):void
{
	for (var i:int = 0; i < massiv.length; i++)
	{
		if (massiv[i] == vvod.text)
		{
			otvet.text = "Верный пароль";
			return;//зачем дальше искать?
		}
                else
		{
			trace("massiv:" + massiv[i] + " vvod:" + vvod.text);
			otvet.text = "Неверный пароль"
		}
 
	}
}

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

Регистрация: Jun 2010
Сообщений: 120
Bgg, мне не понятно, для чего здесь нужен return. У меня же функция ничего не возращает.


Последний раз редактировалось goldlider; 22.10.2010 в 18:35.
Старый 22.10.2010, 18:08
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 4  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Код AS3:
function proverka(event:MouseEvent):void
{
	for each(var val in massiv)
	{
		if (val == vvod.text)
		{
			otvet.text = "Верный пароль";
                        return;
		}
 	}
       otvet.text = "Неверный пароль";
 
}
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 22.10.2010, 18:25
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 5  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
голдлидер, return прерывает цикл и возвращает undefined
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 22.10.2010, 18:25
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 6  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
cleptoman, т.е. return останавливает цикл, если найдено верное число, не проверяя далее весь массив.


Последний раз редактировалось goldlider; 22.10.2010 в 18:34.
Старый 22.10.2010, 18:32
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сообщение от cleptoman Посмотреть сообщение
голдлидер, return прерывает цикл и возвращает undefined
Не совсем.
Код AS3:
		private function myFunction():void
		{
			return undefined; //compile error :(
		}
Если глянуть опкод для return; мы увидим returnvoid. Это не undefined, компилятор говоря "must be undefined" при попытке вернуть что то из void метода/функции не имеет ввиду ключевое слово undefined.

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
я к тому что, у bgg мысль правильная.
лучше вынесите проверку в отдельный метод и возвращайте булево

Код AS3:
function proverka(event:MouseEvent):void
{
otvet.text = (_isRightPass()) ? "Верный пароль" : "Неверный пароль"
}
 
private function _isRightPass():Boolean{
      for each(var val in massiv)	{
		if (val == vvod.text)		{
                        return true;
		}
                return false;
 	}
 
}
эдаким макаром мы от лишних итераций цикла уходим
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: Dec 2009
Сообщений: 428
cleptoman, логическая ошибка

Код AS3:
 
private function _isRightPass():Boolean{
      for each(var val in massiv)	{
		if (val == vvod.text)		{
                        return true;
		}
              //  return false;
 	}
        return false;
 
}
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
я вот к чему:
Код AS3:
function getVoid():void{return };
trace(getVoid())
Добавлено через 1 минуту
leofit, да, конечно..с копипастами, не провирил )
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

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

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


 


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


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