2016-10-13 29 views
0

私はJavaを初めて使い、Javaで複素数を扱う方法がわかりません。私は自分のプロジェクトのコードを書いています。 exp(i * 2 * pi * f)を見つけるために、オイラーのアイデンティティexp(i theeta)= cos(theeta)+ i Sin(theeta)を使用しました。私はこの結果の複素数に配列 "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(...) 'の形式のものが必要になります。あなたが現在持っているのは、コンマで区切られた2つの値を変数に代入しようとしているようです。 – khelwood

+0

khelwoodさんにお返事ありがとうございます。私はそれを修正しました。 – user01

答えて

1

残念ながら、コピーコンストラクタやオーバーロードされた代入演算子ではC++のようには機能しません。

他の概念がありませんので、もちろん

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

に、あなたは、2つの数値を乗算する複合体の使用方法が必要になりますようにあなたは、明示的に複雑なため、コンストラクタを呼び出す必要があります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); 
    } 

} 
関連する問題