我是java新手,不知道如何处理java中的复数。我正在为我的项目编写代码。我使用了Euler的身份,exp(i theeta)= cos(theeta)+ i Sin(theeta)来找到exp(i * 2 * pi * f)。我必须将这个结果复数乘以数组中的另一个数字" d"。这就是我所做的
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()));
表达式上出现错误&#34;作业的左侧必须是变量&#34;。
请帮我解决这个问题。感谢
答案 0 :(得分:1)
不幸的是,它不像C ++中那样使用复制构造函数或重载赋值运算符。
您必须显式调用复合体的构造函数,例如
Data[k][l] = new Complex(realValue, imaginaryVal);
当然,您需要使用复合体的方法来乘以两个数字,因为Java中没有任何其他运算符重载的概念。
所以,也许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);
}
}