как ссылаться на элементы массива класса внутри цикла? - PullRequest
1 голос
/ 13 ноября 2011

Вопрос новичку здесь: я работаю с Flash Builder 4.5 над проектом Actionscript. Я создал следующие классы:

package 
{
    public class ComplexNumber
    {
        public var real:Number;  // real component
        public var imag:Number;  // imaginary component
    }
} 

и

package 
{
    public class ComplexArray
    {
        public var real:Array;  // real component array
        public var imag:Array;  // imaginary component array
    }
}

и статическая функция:

package 
{
    public class ComplexDivide
    {
        public static function v1p0(a:Number, b:Number, // numerator: a+bi
                                    c:Number, d:Number  // denominator: c+di
                                    ):ComplexNumber
        {
            var z:ComplexNumber = new ComplexNumber();  
            var divisor:Number = c*c + d*d;

            z.real = (a*c + b*d) / divisor; // real component
            z.imag = (b*c - a*d) / divisor; // imaginary component          

            return z;
        }
    }
}

и в другом .as файле я пытаюсь вызвать эту функцию

var BXFN_complex:ComplexArray = new ComplexArray();
for (var ii:int = 0; ii <= 2; ii++) {
    BXFN_complex[ii] = ComplexDivide.v1p0( 1, 0, 2, 3 );
}

но код внутри этого цикла генерирует следующую ошибку времени выполнения: «ReferenceError: Ошибка # 1056: невозможно создать свойство 0 в ComplexArray». Таким образом, мой код для "BXFN_complex [ii] = ~" неверен. Кто-нибудь знает, как добиться того, что я пытаюсь сделать? По сути, ComplexDivide.v1p0 возвращает два числа, а BXFN_complex - это объект, содержащий два числовых массива, и я хочу назначить ComplexDivide два числа во второй элемент массивов в BXFN_complex.

1 Ответ

2 голосов
/ 13 ноября 2011

Я не уверен, что понимаю, что вы пытаетесь выполнить, и, честно говоря, мне трудно прочитать ваш код, но причина ошибки проста:

Ваш экземпляр ComplexArray не ведет себя как Array - это объект с двумя member массивами, real и imag, и вам нужно указать, к какому из них вы обращаетесь:

BXFN_complex.real[ii] 

или

BXFN_complex.imag[ii] 

вместо

BXFN_complex[ii] 

Если вы хотите передать только тип ComplexNumber, вы можете использовать для этого функцию:

(on ComplexArray):

public function setItemAt (index:int, n:ComplexNumber) : void {
    real[index] = n.real;
    imag[index] = n.imag;
}

Не забудьте инициализировать массивы real и imag перед добавлением элементов!

И последнее, но не менее важное: я не понимаю, почему вы не используете примитивный массив, который содержит ComplexNumbers, вместо ComplexArray, который содержит два массива примитивных числовых значений - тогда вы можете просто использовать BXFN_complex[ii], как вы делали раньше ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...