我正在编写代码并遵循给予我的所有指示。当我运行程序但是相同的方法时,所有的代码和方法看起来都很好!基于这些说明,当测试询问点(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;
}

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