2016-10-13 74 views
0

我是java新手,不確定如何處理java中的複數。我正在爲我的項目編寫代碼。我用歐拉的身份exp(i theeta)= cos(theeta)+ i Sin(theeta)找到exp(i * 2 * pi * f)。我必須將這個結果複數與數組「d」中的另一個數相乘。這是我做了什麼如何在java中使用複數?

Complex Data[][] = new Complex[20][20]; 
for (int j = 0; j < d.size(); j++){ 
    for (int k = 0; k<20; k++){ 
     for (int l = 0; l<20; l++){ 
      double re = Math.cos(2 * Math.PI * f); 
      double im = Math.sin(2 * Math.PI * f); 
      Complex p = new Complex(re, im); 
      Data[k][l] = ((d.get(j) * p.getReal()), (d.get(j) * p.getImaginary()));  
     } 
    } 
} 

我,但是,說「賦值的左邊必須是一個變量」表達Data[k][l] = ((d.get(j) * p.getReal()), (d.get(j) * p.getImaginary()));得到一個錯誤。 請幫我解決這個問題。謝謝

+2

k] [l]',那麼你通常需要一些'Data [k] [l] = new Complex(...)'的形式。你目前似乎正在試圖將兩個逗號分隔值賦給一個變量,這將永遠不會工作。 – khelwood

+0

感謝khelwood的回覆。我已糾正它。 – user01

回答

1

不幸的是,它不像C++中的複製構造函數或重載賦值運算符。

你必須顯式調用構造函數的複雜,就像

Data[k][l] = new Complex(realValue, imaginaryVal); 

當然,你需要複雜的使用方法,以兩個數相乘,因爲沒有任何其他的想法Java中的運算符重載。

所以,也許如果你想Complex`的`一個實例分配給`數據[中Complex類可能有一些你可能能夠轉而使用運營商的方法,像

class Complex { 
    public static Complex mul(Complex c0, Complex c1) { 
    double r0=c.getRe(), r1=c1.getRe(); 
    double i0=c.getIm(), i1=c1.getIm(); 
    return new Complex(r0*r1-i0*i1, r0*i1+r1*i0); 
    } 

    public static Complex mulStore(Complex res, Complex c0, Complex c1) { 
    double r0=c.getRe(), r1=c1.getRe(); 
    double i0=c.getIm(), i1=c1.getIm(); 
    if(res==null) { 
     res=new Complex(); 
    } 
    res.setRe(r0*r1-i0*i1); 
    res.setIm(r0*i1+r1*i0); 
    return res; 
    } 

    // equiv with this *= rhs; 
    public void mulAssign(Complex rhs) { 
    // perform the "this * rhs" multiplication and 
    // store the result in this. 
    Complex.mulStore(this, rhs, this); 
    } 

}