як посилатися на елементи масиву класу всередині для циклу?

Питання новачка тут: я працюю з 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: Error # 1056: Неможливо створити властивість 0 на ComplexArray". Таким чином, мій код для "BXFN_complex [ii] = ~" неправильний. Хто-небудь знає, як досягти того, що я намагаюся зробити? В основному, ComplexDivide.v1p0 повертає дві цифри, а BXFN_complex - це об'єкт, що містить два масиви чисел, і я хочу призначити ComplexDivide два числа в елементі ii'th масивів у BXFN_complex.

1

1 Відповіді

Я не впевнений, що я розумію, що ви намагаєтеся досягти, і, чесно кажучи, я вважаю, що ваш код важко читати, але причина помилки проста:

Ваш примірник ComplexArray не веде себе як масив - це об'єкт з двома члена масивів, реальним і уявним, і ви повинні вказати, який з них ви дійсно звертаєтеся:

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;
}

Не забудьте ініціалізувати реальні та уявні масиви перед додаванням елементів!

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

2
додано
Завдяки Weltraumpirat, я взяв вашу останню пропозицію, яка розробляється.
додано Автор ggkmath, джерело