Ap计算机科学Java接口和比较方法的困境

时间:2014-04-12 21:10:12

标签: java oop interface constructor compare

我应该写一个实现Locatable接口的Cruiser类。 Cruiser将具有x,y和speed属性。 x,y和speed是整数。您必须为类Cruiser提供3个构造函数。 Class Cruiser必须实现Locatable接口。

一个构造函数必须是默认值。一个构造函数必须是仅x和y构造函数。一个构造函数必须是x,y和speed构造函数。您必须提供equals方法。 equals()方法应该比较两个Cruiser对象的属性。您必须提供toString()方法。 toString()应该返回Cruiser的x,y和速度。

当我编译它时,它说"类Cruiser是公开的,应该在Cruiser.java中声明"

当我这样做时,我的IDE说&#34 ;;"在公共布尔值等于之后的预期值。但是,为什么在方法中需要分号是没有意义的。

这是我到目前为止所拥有的

 public interface Locatable
 {
 public int getxPos();
 public int getyPos();
 }

 public class Cruiser implements Locatable
 {
 private int xPos, yPos, speed;
 public Cruiser()
 {
 xPos=yPos=speed=0;
 }

 public Cruiser(int x,int y)
 {
 xPos=x;
 yPos=y;
 speed=0;
 }

 public Cruiser(int x, int y, int spd)
 {
 xPos=x;
 yPos=y;
 speed=spd;
 }

 public int getxPos()
 {
 return xPos;
 }

 public int getyPos()
 {
 return yPos;
 }

 public int getSpeed()
 {
 return speed;
 }

 public void compare(Cruiser A, Cruiser B)
 {
 @Override
 public boolean equals(Object obj) 
 {
 if (obj instanceof Cruiser) {
    Cruiser cruiserToCompareTo = (Cruiser)obj;

    if(xPos == cruiserToCompareTo.getXpos() &&
            yPos == cruiserToCompareTo.getYpos() &&
            speed == cruiserToCompareTo.getSpeed())
        return true;            
}
return false;
}
public String toString()
{
String properties = "X position:"+ xPos+ ", Y position:"+yPos+ ",Speed:"+speed;
return properties;
}
} 
}

2 个答案:

答案 0 :(得分:1)

这意味着equals应该比较字段/属性。

public boolean equals(Object obj) {
    if (obj instanceof Point) {
        Point pt = (Point)obj;
        return (x == pt.x) && (y == pt.y);
    }
    return super.equals(obj);
}

此示例取自java.awt.Point
这是Java的内置类之一 因此,Point有2个属性xy,以及
在它的equals方法中,它正在比较它们。

另见:

java.awt.Point.equals

答案 1 :(得分:1)

你有一个具有属性x,y,速度的巡洋舰A,你有了具有x,y,速度的巡洋舰B.如果A.x == B.x,A.y == B.y,A.speed == B.speed都是真的,则Equals将返回true。当所有参数相等时,巡洋舰A和巡洋舰B是相同的。

编辑:以下代码应输入Cruiser-Class

public int getSpeed() {
    return speed;
}

@Override
public boolean equals(Object obj) {
    if (obj instanceof Cruiser) {
        Cruiser cruiserToCompareTo = (Cruiser)obj;

        if(xPos == cruiserToCompareTo.getXpos() &&
                yPos == cruiserToCompareTo.getYpos() &&
                speed == cruiserToCompareTo.getSpeed())
            return true;            
    }
    return false;
}

请注意:更好地格式化代码,并在Cruiser-Class中命名方法,与界面中的方法相同。

编辑2:关于你的第二个问题: 您需要分离文件,Cruiser.java和Locatable.java。代码运行良好