2014-11-30 7 views
-2

Я пишу код и следую всем инструкциям, предоставленным мне. Все коды и методы выглядят отлично, когда я запускаю программу, но равный метод! Основываясь на инструкциях, я должен ошибаться, когда тестируемый спрашивает, равна ли точка (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; 
 
     
 
    
 
    }

+2

Каковы типы возвращаемых методов 'getP1()' и 'getP2()'? Если они являются типами объектов, а не примитивами, то вы должны заменить ваши сравнения '==' и '! =' С вызовами их методами 'equals'. –

+1

Зачем использовать геттеры здесь, так как вы в самом классе? Просто используйте 'p1' и' S.p1' вместо 'this.getP1()' и 'S.getP1()'; Кроме того, у вас много избыточного 'else' - почему' else', когда вы «возвращаетесь»? – fge

+0

У вас может быть только одна логическая переменная, которая изменяет значения в зависимости от условия и возвращает эту переменную (вместо нескольких операторов 'return'). – silver

ответ

4
else if (this.getP1() == S.getP1() && this.getP2() == S.getP2()) 
    return true; 
else if(this.getP1() != S.getP1() && this.getP2() != S.getP2()) 
    return true; 

Эти тесты в основном возвращает истину, если обе точки двух отрезков равны или они оба отличаются друг от друга соответственный.

Это избыточно и неправильно, так как оно вернет true для, например, (10,20) и (30,40).

Вам просто нужно, чтобы вернуть первое условие как результат, например:

return this.getP1() == S.getP1() && this.getP2() == S.getP2(); 
+0

Я изменил его, но все тот же выход. :( – Hr0419

+0

Ava, если ответ не устранил вашу проблему, вы не должны были щелкнуть по галочку. Когда другие потенциальные респонденты видят тик, они не будут беспокоиться о предоставлении нового ответа. Тик означает, что «это сработало для меня , и мой вопрос не требует дальнейшего внимания ». –

0

Изменить

if(this.getP1() != S.getP1() && this.getP2() != S.getP2()){ 
    return true; 
} 

для

if(this.getP1() != S.getP1() || this.getP2() != S.getP2()) 
{ 
    return false; 
} 

, потому что если один из их членов Diferent они не равны, поэтому вы должны вернуться false

Смежные вопросы