为什么我得到错误的equals方法输出?

时间:2014-11-30 19:06:33

标签: java equals

我正在编写代码并遵循给予我的所有指示。当我运行程序但是相同的方法时,所有的代码和方法看起来都很好!基于这些说明,当测试询问点(a,b)---(c,d)是否等于(e,f)---(g,h)时,我应该得到假,但是我得到了真正。谁能让我知道我做错了什么?



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 个答案:

答案 0 :(得分: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。

这是多余的错误,因为它会返回true,例如(10,20)(30,40)

您只需返回第一个条件作为结果,例如:

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

答案 1 :(得分:0)

更改

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

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

因为如果他们的一个成员不同,他们不是平等的,所以你应该返回false