【问题标题】:trouble writing a static version of the add and subtract methods (this is in java) [closed]难以编写加法和减法的静态版本(这是在java中)[关闭]
【发布时间】:2015-01-07 12:17:38
【问题描述】:

我需要帮助编写加法和减法的静态版本。我试过这样做,但我不确定这是否是正确的方法,而且我的 equals 方法也不起作用。当我编译我的 equals 方法时,它总是打印错误。

public static void main(String[] args) {
    Complex c1 = new Complex(7, 7);
    Complex c2 = new Complex(7, 7);

    System.out.println(Complex.add(c1, c2));
    System.out.println(c1.equals(c2));

}

}

class Complex {

private static double realPart;
private static double imaginaryPart;

public Complex() {
    realPart = 0;
    imaginaryPart = 0;

}

public Complex(double c1, double c2) {
    realPart = c1;
    imaginaryPart = c2;

}

public static Complex add(Complex firstNumber, Complex secondNumber) {

    Complex result = new Complex();
    firstNumber.realPart = 7;
    secondNumber.imaginaryPart = 7;
    result.realPart = firstNumber.realPart + secondNumber.imaginaryPart;

    return result;

}

public static Complex subtract(Complex firstNumber, Complex secondNumber) {
    Complex result = new Complex();
    firstNumber.realPart = 7;
    secondNumber.imaginaryPart = 7;
    result.realPart = firstNumber.realPart + secondNumber.imaginaryPart;
    return result;
}

public boolean equals(Complex firstNumber, Complex secondNumber) {

    if (firstNumber == secondNumber) {
        return true;
    } else {
        return false;
    }

}

public String toString() {

    return "result= " + realPart;
}
}

【问题讨论】:

    标签: java javascript-objects instances static-classes static-constructor


    【解决方案1】:

    对象总是使用equals() 方法进行比较。

    == 不是比较对象的方法!!!

    (这已在堆栈溢出论坛上发布了数百次或更多次)

    另外,添加一个@Override 注释更清晰,以便您覆盖equals方法...

    将您的代码改进为:-

    @Override
    public boolean equals(Complex firstNumber, Complex secondNumber) {
    if (firstNumber.equals(secondNumber)) {
        return true;
    } else {
        return false;
    }
    
    }
    

    【讨论】:

    • 但它仍然返回 false 。我想知道为什么会这样?
    • 之所以如此,是因为对象只有在引用相同的位置时才会相等。您只需设置 firstNumber=SecondNumber;然后尝试使用我提到的答案进行等同,然后您就会知道为什么会这样......如果您想要其他事情,请使用提到的第一个答案来比较两个对象的元素以使它们等同!
    • @Dee-点赞会更受青睐和帮助。提前致谢...
    【解决方案2】:

    比较对象不起作用。 您需要比较对象中的成员变量。 我相信如果你比较对象,你所比较的只是对象的存储位置。

    接下来是……我不认为 realPart 值和 imaginaryPart 值应该是静态的。如果您希望每个复杂对象具有唯一的 realPart 和 imaginaryPart 值,它应该只是一个成员变量。

    【讨论】:

    • 成员变量是什么意思?
    • 静态变量 = 属于一个类 |成员变量=属于每个对象
    • 有人称其为实例变量:coderanch.com/t/528608/java/java/…
    • 哦,好吧。我的意思是我对 java 很陌生,所以我刚开始了解这些概念,但是你说我需要将实例变量与对象进行比较,对吗?
    • 你需要比较每个对象的实例变量。您通常从不直接将对象与对象进行比较
    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多