Форум 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 не дружишь :) чем они тебе неугодили?

wvxvw 10.01.2008 16:58

Цитата:

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

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


Это совсем не та операция, которая мне нужна %)) Если класс наследует метод - зачем его еще и с "супером" вызывать?

Кразифлашер - при чем тут паблик/прайвет? Если не объявлено - значит паблик. И это к теме никакого отношения не имеет.

Мне не нужно вызывать пуш или еще какой метод, мне надо, чтобы конструктор Array'я был так же конструктором моего класса, ну или что-нибудь, что делало бы то же самое.
И вопрос в последнем посте - не как сделать по-другому (это я как-нть и сам могу =), а почему this из конструктора и из метода трейсится по-разному.

BlooDHounD 10.01.2008 17:02

затем что если ты его переопределишь в друх наследниках то однозначно вызовется правельный.

а про не ту операцию: по крайнее мере результат будут эдэнтичен. только твой не работает, а дениса работает :)

CrazyFlasher 10.01.2008 17:02

Цитата:

Кразифлашер - при чем тут паблик/прайвет? Если не объявлено - значит паблик. И это к теме никакого отношения не имеет.
грамотность написания кода (особенно когда автор топика - новичок), всегда имеет отношение...имхо ;-)

wvxvw 10.01.2008 17:06

Блуд, мой первый вариант - тоже будет работать правельно (после поправки). Вопрос не как сделать, а почему this трейсится по-разному.

ЗЫ. по поводу паблик/прайвет ключей перед конструктором - то ето скорее путает человека, т.как конструктор - ето не функция если по-честному, вот именно там писать ключи не нужно. Ето глупый способ создавать синглтон в АС2 объявляя конструктор как прайвет (кроме того до конца не работающий).

etc 10.01.2008 17:49

Выражение «this = …» само по себе абсурдно.

BlooDHounD 10.01.2008 17:55

не будет твой вариант работать ни прикаких условиях :) this - readonly

записью this = ты по идеи должен изменить экзепляр класса MArray на экзепляр Array, а значит метода summ там уже не будет :)

wvxvw 10.01.2008 18:24

Ну, ребят =) я же не спрашиваю, а кажется ли вам это выражение абсурдным или неправельным или наводящим смертную тоску на длиннохвостых попугаев Австралии %)
Компайлер не ругается - значит можно %)
Ну как же не будет? %) Простой копипаст и жмакание Контрол-Ентер доказывает обратное =) Просто мне кажется, что this в конструкторе показывает куда-то не совсем туда, куда я предполагал %)
Или, поставим вопрос по другому: Куда девается значение this после того, как конструктор выполняется?

BlooDHounD 10.01.2008 18:27

бугага ... Олег, ты знаешь что такое this? куда он делася :) а никуда. это была локальная перменная конструктора, либо не пойми хер что. этот код не рабочей :) я тебе могу 10ки вариантов написания кода предоставить где компилятор не ругается, а нефига не работет. да НЕ ПРОВЕРЯЕТ компилятор такого рода синтаксис :)

wvxvw 10.01.2008 18:43

Ладно, фик с ним %) Просто странно, я был в полной уверенности, что this в конструкторе будет показывать туда же, куда и this объекта который он создает. =) Ну нет, так нет.

CrazyFlasher 10.01.2008 18:50

this это как бы "данный объект, класс"...и он одинаков как в конструкторе, так и в других методах ;-)

BlooDHounD 10.01.2008 18:56

просто ты внутри самого объекта пытаешься переопределить сам объект :) ты извини но тебе это никто не сможет разрешать.


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

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