Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   TypeError: Error #1010: Термин не определен и не имеет свойств. (http://www.flasher.ru/forum/showthread.php?t=126607)

rs7 23.06.2009 16:09

TypeError: Error #1010: Термин не определен и не имеет свойств.
 
Всем доброго времени суток.
Помагите найти ошибку в коде, скоро с ума сойду.)
Код AS3:

 public static function encode(In:String):String {
 
        if(In.length<2) return "0";
 
        var weight:Object = new Object();
        for(var i:Number=0;i<In.length;i++){
                weight[In.charAt(i)]=weight[In.charAt(i)]?weight[In.charAt(i)]+1:1;
        }
 
        var code:Object = new Object();
        for(var j:String in weight){
                code[j]=new Object();
                code[j]["key"]="";
                code[j]["enable"]=true;
                code[j]["weight"]=weight[j];
        }
 
        var min:Array=new Array(2);
        var min_ind:Array=new Array(2);
        var new_ind:String;
 
        do{
                min_ind=["",""];
                min[0]=In.length;
                for(j in code){
                        if(code[j]["enable"] && code[j]["weight"]<=min[0]){
                                min[1]=min[0];
                                min[0]=code[j]["weight"];
                                if(min_ind[0]!="") min_ind[1]=min_ind[0];
                                      min_ind[0]=j;
                        }
                }
 
                new_ind="";
 
                code[min_ind[0]]["key"]="1";       
                code[min_ind[0]]["enable"]=false;
                new_ind+=min_ind[0];
 
                code[min_ind[1]]["key"]="0";                                       
                code[min_ind[1]]["enable"]=false;
                new_ind+=min_ind[1];               
 
 
                code[new_ind]=new Object();
                code[new_ind]["key"]="1";                               
                code[new_ind]["enable"]=true;
              code[new_ind]["weight"]=code[min_ind[0]]["weight"]+code[min_ind[1]]["weight"];
        } while(code[new_ind]["weight"]<In.length);
 
        trace(JSON.encode(code));
        return "";
}

нагло выдаёт мне
Цитата:

TypeError: Error #1010: Термин не определен и не имеет свойств.
иногда выполняется без ошибки в таком варианте.
если добавить в цикл do..while в конце trace(code[new_ind]["weight"]); то ошибка уходит

iNils 23.06.2009 16:19

Номер строки при ошибке какой?

rs7 23.06.2009 16:37

Не знаю.
Ошибка не возникает при отладке.
Flash CS4

willis83 23.06.2009 17:10

похоже обращается к какой-то из ячеек массива которая не определена, но в таком коде вам долго придётся искать... trace вам в помощь... и терпения конечно

Добавлено через 2 минуты
ещё не понял, зачем функцию делать возвращающей строку, если она в любом случае возвращает пустую строку?

rs7 23.06.2009 20:44

Нашёл ошибку. Была логическая ошибка, которая, тем не менее появлялась только иногда.

Причиной тому было то, что АС3 располагает поля объектов не в том порядке как мы их задаем, а по своему. И соответсвенно алгоритм работал по разному на разных прогонах.


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

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