-1

Мне нужна помощь при написании статической версии методов добавления и вычитания. я пытался это сделать, но я не уверен, правильно ли это, и мой метод equals не работает. Когда я компилирую свой метод equals, он всегда печатает false.Проблема с записью статической версии методов добавления и вычитания (это в java)

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

ответ

1

Объекты всегда сравниваются с использованием метода equals().

== не является способ сравнения объектов !!!

(ЭТО БЫЛА POSTED О СОТНИ РАЗ ИЛИ БОЛЕЕ ПО Stack Overflow ФОРУМА)

Кроме того, добавьте @Override аннотаций, чтобы быть более ясным, так что вы переопределение метода Equals ...

улучшить свой код, как: -

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

} 
+0

, но он все равно возвращает false. я хотел бы знать, почему он это делает? – Dee

+1

Это потому, что объекты будут равны только тогда, когда они ссылаются на одни и те же местоположения. Вы только что установили firstNumber = SecondNumber; И затем попробуйте приравнивать, используя ответ, о котором я упоминал, тогда вы узнаете, почему это так ... Если вы хотите другое, перейдите с первым ответом, как упомянуто, чтобы сравнить элементы обоих объектов, чтобы приравнять их! –

+0

@ Dee-Up upvote будет более предпочтительным и полезным. СПАСИБО В ADVANCE ... –

1

Сравнение объектов не работает. Вам нужно сравнить переменные-члены в объекте. Я считаю, что если вы сравниваете объекты, все, что вы сравниваете, это местоположение, в котором хранится объект.

Следующая вещь ... Я не думаю, что значение realPart и мнимое значение Part должны быть статическими. Если вы хотите, чтобы каждый сложный объект имел уникальное значение realPart и imaginaryPart, он должен быть просто переменной-членом.

+0

что вы имеете в виду переменных-членов? – Dee

+0

static variable = принадлежит классу | member variable = принадлежит каждому объекту – kevkev97kk

+0

некоторые люди называют его переменной экземпляра: http://www.coderanch.com/t/528608/java/java/Difference-Static-Instance-variable – kevkev97kk