Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите, пожалуйста, найти ошибку в коде. (http://www.flasher.ru/forum/showthread.php?t=145900)

goldlider 22.10.2010 17:42

Помогите, пожалуйста, найти ошибку в коде.
 
Имеется такая задача: даны два текстовых поля и две кнопки. Вводим в поле 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 верного числа, постоянно выводит ответ "Неверный пароль". Вроде бы, код верный.

Bgg 22.10.2010 17:50

А что в 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 = "Неверный пароль"
                }
 
        }
}


goldlider 22.10.2010 18:05

Bgg, мне не понятно, для чего здесь нужен return. У меня же функция ничего не возращает.

leofit 22.10.2010 18:08

Код AS3:

function proverka(event:MouseEvent):void
{
        for each(var val in massiv)
        {
                if (val == vvod.text)
                {
                        otvet.text = "Верный пароль";
                        return;
                }
        }
      otvet.text = "Неверный пароль";
 
}


cleptoman 22.10.2010 18:25

голдлидер, return прерывает цикл и возвращает undefined

goldlider 22.10.2010 18:25

cleptoman, т.е. return останавливает цикл, если найдено верное число, не проверяя далее весь массив.

Psycho Tiger 22.10.2010 18:32

Цитата:

Сообщение от cleptoman (Сообщение 944662)
голдлидер, return прерывает цикл и возвращает undefined

Не совсем.
Код AS3:

                private function myFunction():void
                {
                        return undefined; //compile error :(
                }

Если глянуть опкод для return; мы увидим returnvoid. Это не undefined, компилятор говоря "must be undefined" при попытке вернуть что то из void метода/функции не имеет ввиду ключевое слово undefined.

cleptoman 22.10.2010 18:35

я к тому что, у 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;
        }
 
}

эдаким макаром мы от лишних итераций цикла уходим

leofit 22.10.2010 18:37

cleptoman, логическая ошибка

Код AS3:

 
private function _isRightPass():Boolean{
      for each(var val in massiv)        {
                if (val == vvod.text)                {
                        return true;
                }
              //  return false;
        }
        return false;
 
}


cleptoman 22.10.2010 18:38

я вот к чему:
Код AS3:

function getVoid():void{return };
trace(getVoid())

Добавлено через 1 минуту
leofit, да, конечно..с копипастами, не провирил )


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

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