2011-11-13 36 views
1

新手問題在這裏:我正在使用ActionScript Builder項目上的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; 
     } 
    } 
} 

而在另一個文件中。作爲我試圖調用這個函數

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:無法在ComplexArray上創建屬性0」。因此,我的「BXFN_complex [ii] =〜」代碼不正確。任何人都知道如何實現我想要做的事情?基本上,ComplexDivide.v1p0返回兩個數字,而BXFN_complex是一個包含兩個數字數組的對象,我想將ComplexDivide兩個數字分配到BXFN_complex中的第二個數組元素。

回答

2

我不知道我理解你想什麼來完成的,坦率地說,我覺得你的代碼難以閱讀,但是錯誤的原因很簡單:

你ComplexArray實例不會表現得像一個陣列 - 它是有兩個成員陣列,real和imag一個對象,你需要指定要acually解決其中一個:

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]

+0

感謝Weltraumpirat,我接受了你的最後一個建議,正在制定中。 – ggkmath

相關問題