如何在for循环中引用类的数组元素?

时间:2011-11-13 00:08:53

标签: flash flex actionscript

新手问题:我在ActionScript项目上使用Flash Builder 4.5。我创建了以下类:

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

但是此循环内的代码会生成以下运行时错误:&#34; ReferenceError:错误#1056:无法在ComplexArray上创建属性0。&#34;因此,我的代码是&#34; BXFN_complex [ii] =〜&#34;是不正确的。任何人都知道如何实现我想要做的事情?基本上,ComplexDivide.v1p0返回两个数字,而BXFN_complex是一个包含两个数字数组的对象,我想将ComplexDivide两个数字分配给BXFN_complex中数组的第二个元素。

1 个答案:

答案 0 :(得分:2)

我不确定我理解你想要完成什么,坦率地说我发现你的代码难以阅读,但错误的原因很简单:

您的ComplexArray实例的行为与Array不同 - 它是一个包含两个成员数组的实体和图像的对象,您需要指定您正在寻址的实体:

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的原始数组,而不是使用包含两个原始Number值数组的ComplexArray - 那么你可以像你一样使用BXFN_complex[ii]之前做过。