#java #complex-numbers
#java #комплексные числа
Вопрос:
Я новичок в Java и не уверен, как работать с комплексными числами в Java. Я пишу код для своего проекта. Я использовал идентификатор Эйлера, 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()));
, в котором говорится: «Левая часть присваивания должна быть переменной».
Пожалуйста, помогите мне решить эту проблему. Спасибо
Комментарии:
1. Если вы пытаетесь назначить экземпляр
Complex
toData[k][l]
, то вам, как правило, понадобится что-то в формеData[k][l] = new Complex(...)
. То, что у вас сейчас есть, похоже, пытается присвоить переменной два значения, разделенных запятыми, что никогда не сработает.2. Спасибо за ответ, Хелвуд. Я исправил это.
Ответ №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);
}
}