0

複素数用の complex.java コードを作成しました。しかし、Eclipseで「ローカル変数realが初期化されていない可能性があります」というエラーが発生します。何が悪いのかわかりません。コードは次のとおりです。どんな助けでも大歓迎です。

import java.lang.Math; 

public class Complex { 
    public double real; 
    public double comp; 

    Complex(double real, double comp) {  
    this.real = real; 
    this.comp = comp; 
    }

    Complex() { 
    this.real = 0; 
    this.comp = 0;
    }


    public double getReal() {
        return real;
    }

    public double getImg() {
        return comp;
    }


    public Complex add(Complex a) { 
        return new Complex(a.getReal() + this.real, a.getImg() + this.comp);
    }


    public static Complex add(Complex a, Complex b) { 
        double real = a.real + b.real;
        double comp = a.comp + b.comp;
        Complex sum = new Complex(real, comp);
        return sum;
    }

    public double getABS() { 
        return Math.sqrt(real*real + comp*comp);
    }

    public double getABSSqr() { /* get the squre of absolute */
        return (real*real + comp*comp);
    }


    public Complex mul(Complex a) { 
        return new Complex(a.getReal()*this.real-a.getImg()*this.comp, a.getReal()*this.comp+this.real*a.getImg());
    }

    public static Complex mul(Complex a, Complex b) { 
        double real = a.real*b.real-a.comp*b.comp;
        double comp = a.real*b.comp+b.real*a.comp;
        Complex mul = new Complex(real, comp);
        return mul;
    }

    public Complex squre() { 
        double real = real*real-comp*comp; //THIS IS WHERE ERROR APPEARS FOR real*real
        double comp = 2*real*comp;  //THIS IS WHERE ERROR APPEARS FOR comp                  
        Complex squre = new Complex(real, comp);
        return squre;
    }   

    public void display() { 
    System.out.println(this.real + " + " + this.comp + "j");
    }
}
4

3 に答える 3

0

素晴らしい質問です。行で:

double real = real*real-comp*comp;

式で参照される実際の変数は、実際に は、オブジェクトのフィールドではなく、宣言したばかりreal*realのローカル変数です。スコープに関しては、ローカル変数が優先されます。フィールドを参照したい場合は、使用する必要があります: 話しているスコープを明示するために。realrealthis.real

例えば:

double real = this.real * this.real - this.comp * this.comp;
double comp = 2 * this.real * this.comp;

または、コンパイラが混乱しないように、ローカル変数に別の名前を使用して問題を回避できます。

double r = real * real - comp * comp;
double c = 2 * real * comp;
return new Complex(r, c);

または、一時変数を削除して、計算を 1 行にまとめることができます。

public Complex square() { 
    return new Complex(real * real - comp * comp, 2 * real * comp);
}
于 2013-10-01T17:41:21.183 に答える