2016-10-13 4 views
0

나는 자바에 익숙하지 않고 자바에서 복소수를 다루는 방법을 모르고있다. 내 프로젝트 코드를 작성하고있다. exp (i * 2 * pi * f)를 찾기 위해 오일러의 정체성 exp (i theeta) = cos (theeta) + i 신 (theeta)을 사용했습니다. 이 결과 복소수에 배열 "d"의 다른 숫자를 곱해야합니다. 여기에 내가 "할당의 왼쪽 변수해야합니다"라고 표현 Data[k][l] = ((d.get(j) * p.getReal()), (d.get(j) * p.getImaginary()));에 오류가 점점 그러나, 자바에서 복소수로 작업하는 방법은 무엇입니까?

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()));  
     } 
    } 
} 

I 오전

을했을 것입니다. 이 문제를 해결하는 데 도움을주십시오. 감사합니다

+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); 
    } 

} 
관련 문제