Я пишу код и следую всем инструкциям, предоставленным мне. Все коды и методы выглядят отлично, когда я запускаю программу, но равный метод! Основываясь на инструкциях, я должен ошибаться, когда тестируемый спрашивает, равна ли точка (a, b) --- (c, d) (e, f) --- (g, h), но я получаю правда. Может ли кто-нибудь дать мне представление о том, что я делаю неправильно?Почему я получаю неправильный вывод метода equals?
public boolean equals(Object obj) {
//if (obj instanceof Segment) {
//Segment other = (Segment) obj;
//return p1 == other.getP1() && p2 == other.getP2();
//}
//else {
//throw new IllegalArgumentException("undefined");
//}
if(obj == null)
return false;
if(this == obj)
return true;
//if(!(obj instanceof Segment))
//return false;
else if(obj.getClass() != this.getClass())
return false;
else {
Segment S = (Segment)obj;
if (this.getP1() == S.getP1() &&
this.getP2() == S.getP2())
return true;
else if(this.getP1() != S.getP1() &&
this.getP2() != S.getP2()){
return true;}
return false;
}
//else if(obj.getP1() != this.getP1() &&
// obj.getP2() != this.getP2());
// return false;
}
Каковы типы возвращаемых методов 'getP1()' и 'getP2()'? Если они являются типами объектов, а не примитивами, то вы должны заменить ваши сравнения '==' и '! =' С вызовами их методами 'equals'. –
Зачем использовать геттеры здесь, так как вы в самом классе? Просто используйте 'p1' и' S.p1' вместо 'this.getP1()' и 'S.getP1()'; Кроме того, у вас много избыточного 'else' - почему' else', когда вы «возвращаетесь»? – fge
У вас может быть только одна логическая переменная, которая изменяет значения в зависимости от условия и возвращает эту переменную (вместо нескольких операторов 'return'). – silver