用于检查X和Y坐标的equals()方法

时间:2013-09-05 14:38:21

标签: java line coordinates equals point

好的,首先对不起,如果这段代码很乱,而且我的equals()完全错了,但这是我第一次使用它。

我正在尝试创建一个equals方法来检查两条线是否相等,如果两个端点相同,则将两条线定义为相等。

我的第一个问题是,我是否接近Point类中的方法,以及如何从Line类调用Point类中的equals()方法?

感谢您的帮助。

public class Point {

private int x;
private int y;

public Point( int x, int y) {
    this.x = x;
    this.y = y;
}

public int getX() {
    return x;
}
public int getY() {
    return y;
}

public String toString() {
    return "x=" + x + ", y=" + y;
}

public boolean equals(Object o) {
      if (!(o instanceof Point)) {
            return false;
        }
        return (x == ((Point) o).x && y == ((Point) o).y);
}
}

}

返回this.y,它说“无法访问的代码”。我的物体也应该是“点”还是“线”?

public class Line {
private Point beg, end;
Color color;

public Line(Point beg, Point end, String color) {
    this.beg = beg;
    this.end = end;


public Point getEnd() {
    return end;
}

public Point getBeg() {
    return beg;
}

public Color getColor() {
    return color;
}

public String toString() {
    return "Beg=" + beg + ", End=" + end + ", Color" + color.toString();
}

Line() {
    return this.beg.equals(Point.x);
    return this.end.equals(Point.y);
}

}

我在点类中更新了equals()但是我仍然无法从Line类中调用它,它是否会有类似的修复?

感谢您的帮助。

8 个答案:

答案 0 :(得分:1)

它是无法访问的代码,因为您之前通过return退出了该方法。你可能意味着this.x == ((Point)o).x && this.y == ((Point)o).y

你应该有类似的东西:

@Override
public boolean equals(Object o) {
    if (o == null) {
        return false;
    }
    if (!(o instanceof Point)) {
        return false;
    }
    return (x == ((Point) o).x && y == ((Point) o).y);
}

此外,对于Line课程,您需要比较相关字段(begend)。

@Override
public boolean equals(Object o) {
    if (o == null) {
        return false;
    }
    if (!(o instanceof Line)) {
        return false;
    }
    return (beg == ((Line) o).beg && end == ((Line) o).end);
}

当您覆盖equals(和hashCode时,总是成对编写它们)最好使用@Override注释,以防您编写public boolean equals(Point o)(错误地注意参数是Point,而不是Object),因此编译器会捕获它。

答案 1 :(得分:0)

它表示无法访问的代码,因为您的equals()方法将在return this.x == ((Point)o).x;

上完成执行

尝试使用:

public boolean equals(Object o) {
    if(this.x == ((Point)o).x && this.y == ((Point)o).y) {
        return true;
    }
    return false;
}

可以缩短为:

public boolean equals(Object o) {
    return this.x == ((Point)o).x && this.y == ((Point)o).y;
}

答案 2 :(得分:0)

应该是:

public class Point {
    public boolean equals(Object o) {
        return (this.x == ((Point)o).x) && (this.y == ((Point)o).y);
    }
}

这样您的代码就无法访问。

另外你必须检查:

if (!(o instanceof Point)) return false;

答案 3 :(得分:0)

在第一次return调用之后,该方法退出,因此永远不会评估第二个方法。

改为使用return (this.x == ((Point)o).x) && (this.y == ((Point)o).y);

public class Point {
    public boolean equals(Object o) {
        if(o == null) return false;
        if(!(o instanceOf Point) return false;
        return (this.x == ((Point)o).x) && (this.y == ((Point)o).y);
    }
}

答案 4 :(得分:0)

你不可能一个接一个地有2个返回语句,因为第二个语句总是无法访问。您可以使用此功能,评估x是否等于o.xy等于o.y

 public boolean equals(Object o) {
        return this.x == ((Point)o).x && this.y == ((Point)o).y;
    }

答案 5 :(得分:0)

'return'语句退出方法,这就是为什么永远不会到达任何代码的原因。此外,最好检查传递的对象是否属于正确的类,以避免类强制转换异常:

public boolean equals(Object o) {
    if (o instanceof Point) {
        Point po = (Point) o;
        return this.x == po.x && this.y == po.y;
    }
    return false;
}

参数需要是'Object'而不是'Point',所以这个方法会覆盖Object.equals方法

答案 6 :(得分:0)

您正在使用

return this.x == ((Point)o).x;
return this.y == ((Point)o).y;

此代码将在检查x后返回,但永远不会到达y。

因此,为了使您的代码正常工作,请使用

return (this.x == ((Point)o).x)&&(this.y == ((Point)o).y);

此代码将检查x和y两者,然后返回

答案 7 :(得分:0)

如果你重写equals,你应该/必须覆盖hashCode()!

public boolean equals(Object o) {
   if(o==this){return true;}
   if(!o instanceof Point){return false;}
   Point p = (Point)o;
   return (this.x==p.x && this.y==p.y);
}