Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сумма массива (http://www.flasher.ru/forum/showthread.php?t=106365)

gurman 10.01.2008 01:34

Сумма массива
 
Посоветуйте пожалуйста, что не так
Код:

var counts = new Array(4, 7, 2);
SumArr = function(Iar){
        var sumr,i=0;
        while(i<Iar){
        sumr+=counts[i];
        i++;
        }
        return sumr;
};
m.onRelease = function(){
        sumr=SumArr(2);
        trace(sumr);
}

Трэйсом должно вывести сумму элементов массива, переданных в Iar

Aziz Zaynutdinoff 10.01.2008 01:47

что это за переменные такие? :)
у вас result (если ранее не объявлен) равен undefined (NaN), counts тоже чепуха какая-то, о которой ранее не говорится (из того фрагмента кода), затем объявляется переменная sumr равная 0 и она же возвращается (зачем тогда вся эта функция, если по данному куску кода можно было просто написать sumr = 0 и не вызывать никакую функцию) и зачем возвращать значение переменной, над которой никаких действий не производилось?

бред короче :)

Mr. Fixit 10.01.2008 04:09

а какой результат вы хотите видеть?
counts не объявлен массив, а элементы в нем не содержатся.
добавляйте любой элемент в массив с помощью таких методов, напр:
Код:

var someArr:Array = new Array();

someArr.push('happy'); // someArr[0]
someArr.push('funny'); // someArr[1]

someArr.unshift('xD'); // someArr[0]
// someArr[1] = 'happy';
// someArr[2] = 'funny';

someArr.splice(1, 0, ':P'); // someArr[1]

trace(someArr); // xD, :P, happy, funny

по идее, так должно быть. Разберитесь ;)

wvxvw 10.01.2008 12:36

Класс MArray
Код:

class MArray extends Array {
        function MArray(){
                if(arguments.length>1 || (isNaN(arguments[0])&&arguments.length==1)){
                        for(var i:Number=0;i<arguments.length;i++){
                                this.push(arguments[i]);
                        }
                } else if(!isNaN(arguments[0])&&arguments.length==1){
                        for(var i:Number=0;i<arguments[0];i++){
                                this.push(undefined);
                        }
                }
        }
        function summ():Number {
                var n:Number = 0;
                var i:Number = 0;
                trace(this);
                trace(this.length);
                while(i<this.length){
                        if(!isNaN(this[i])){
                                n+=this[i];
                        }
                        i++;
                }
                return n;
        }
}

Использование:
Код:

var _marr:MArray = new MArray('a',0,.45,90,{a:'s'});
trace(_marr);
trace(_marr.summ());
_marr.push('lalala');
trace(_marr);

Трейс:
Код:

a,0,0.45,90,[object Object]
a,0,0.45,90,[object Object]
5
90.45
a,0,0.45,90,[object Object],lalala


etc 10.01.2008 12:40

wvxvw, оригинальный конструктор класса. Ну то, что написан, мягко говоря, криво, так ещё и цикл в else if получится бесконечный.

alexcon314 10.01.2008 13:58

Код:

var counts = [4, 7, 2];
SumArr = function (Iar) {
        var sumr = 0;
        var i = 0;
        while (i < Iar) {
                sumr += counts[i];
                i++;
        }
        return sumr;
};
sumr = SumArr(2);
trace(sumr);

и вот это
Код:

var sumr, i = 0;// зачем так объявлять переменные?
trace(sumr);


gurman 10.01.2008 14:36

alexcon314 спасибо, с переменными исправлюсь

wvxvw 10.01.2008 16:44

Цитата:

Сообщение от __etc
wvxvw, оригинальный конструктор класса. Ну то, что написан, мягко говоря, криво, так ещё и цикл в else if получится бесконечный.

Писал пока кофе перед работой пил %) Восклик не поставил, поправил.

PS:
Код:

class MArray extends Array {
        function MArray(){
                this = Array.apply(null,arguments);
                trace(this);
        }
        function summ():Number {
                var n:Number = 0;
                var i:Number = 0;
                while(i<this.length){
                        if(!isNaN(this[i])){
                                n+=this[i];
                        }
                        i++;
                }
                return n;
        }
}

Вот, странная штука, не могу понять. Почему в конструкторе this трейсится нормально, а функциях класса - нет?

etc 10.01.2008 16:49

Цитата:

Сообщение от wvxvw
Код:

this = Array.apply(null,arguments);

Этот шедевр покруче предыдущего :)
Хотя бы так (с восьмой версии):
Код:

public function MArray() {
    super();
    super.push.apply(this, arguments);
}


CrazyFlasher 10.01.2008 16:53

wvxvw, я смотрю ты с public, private не дружишь :) чем они тебе неугодили?


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

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