初始化复数JAVA

时间:2016-04-21 08:53:21

标签: java

我想问一下,如果我想将它们用作加法和乘法的中性元素,我可以如何初始化最终字段ONE和ZERO

他们必须是美好的

enter image description here

public class ComplexNumber {


/**Constant for multiplication. Value 1*/
//public final ComplexNumber ONE;
/**Constant for addition. Value 0 */
//public final ComplexNumber ZERO; 
/**The real value of ComplexNumber! FINAL*/
private final double a;
/**The imaginary value of ComplexNumber! FINAL*/
private final double b;

/**
 * This Constructor initializes real and imaginary values  of ComplexNumber
 * @param a double real value
 * @param b double imaginary value 
 */
ComplexNumber(double a, double b) {
    this.a = a;
    this.b = b;
    //this.ONE = new ComplexNumber(1,0); //TODO ask
//  this.ZERO = new ComplexNumber(0);
}
/**
 * This Constructor initializes imaginary value of CompexNumber
 * @param b double imaginary value
 */
ComplexNumber(double b){
    this.a = 0;
    this.b = b;
    //this.ONE = new ComplexNumber(1,0); //TODO ask
//  this.ZERO = new ComplexNumber(0);
}

谢谢!

3 个答案:

答案 0 :(得分:6)

如果你想从它们中制作常量,请像这样声明并初始化它们:

public static final ComplexNumber ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);

static表示该字段是特定于类的,而不是特定于实例的。 final表示无法重新分配参考。对于一个实常数,实例也必须是不可变的,我认为你的代码正在执行,因为ab无法从你的类外部访问。

答案 1 :(得分:0)

只有constructor是在Java中初始化final变量的方法。

因为A final只能在其生命周期中初始化一次,所以无法再次重新初始化它。

因此,使用参数调用构造函数是初始化的最佳方法。

答案 2 :(得分:0)

    public class ComplexNumber {
        final double realPart;
        final double imgPart;

        public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
        public static final ComplexNumber ZERO = new ComplexNumber(0, 0);

        public ComplexNumber(double realPart, double imgPart) {
             this.realPart = realPart;
             this.imgPart = imgPart;
        }

        public ComplexNumber(double imgPart) {
             this(0, imgPart);
        }
    }

为了使您的代码可读,您可以将字段名称重命名为real和img part 并使用构造函数链接,以便您可以重用现有的构造函数。

修改

  public class ComplexNumber {
        final double realPart;
        final double imgPart;

        public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
        public static final ComplexNumber ZERO = new ComplexNumber(0, 0);

        public ComplexNumber(double realPart, double imgPart) {
            this.realPart = realPart;
            this.imgPart = imgPart;
        }

        public static ComplexNumber createRealComplexNumber(double realPart) {
            return new ComplexNumber(realPart, 0.0);
        }

        public static ComplexNumber createImgComplexNumber(double imgPart) {
            return new ComplexNumber(0.0, imgPart);
        }
    }

如果您想创建仅包含实部的复数,您将无法重载只有实部的构造函数,因为已经使用了相同的签名。您可以使用此方法