首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ap计算机科学Java接口和比较方法困境

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

Stack Overflow用户
提问于 2014-04-13 05:10:12
回答 2查看 1.4K关注 0票数 0

我应该编写一个Cruiser类来实现Locatable接口。巡洋舰将有x,y和速度属性。x、y和速度都是整数。您必须为类Cruiser提供3个构造函数。类巡航器必须实现Locatable接口。

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

当我编译这段代码时,它显示"class Cruiser是公共的,应该在Cruiser.java中声明“。

当我这样做的时候,我的IDE会在public boolean equals后面显示";“。但是这并不能解释为什么你需要在一个方法中使用分号。

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

代码语言:javascript
复制
 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;
}
} 
}
EN

回答 2

Stack Overflow用户

发布于 2014-04-13 05:16:59

这就是equals应该比较字段/属性的含义。

代码语言:javascript
复制
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有两个属性xy,并且

在它的equals方法中,它正在比较它们。

另请参阅:

java.awt.Point.equals

票数 1
EN

Stack Overflow用户

发布于 2014-04-13 05:28:53

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

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

代码语言:javascript
复制
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。代码在这里运行得很好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23036149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档