Ap计算机科学Java接口和比较方法困境
我应该编写一个Cruiser类来实现Locatable接口。巡洋舰将具有x、y和速度属性。x、 y和速度是整数。您必须为class Cruiser提供3个构造函数。Class Cruiser必须实现可定位接口 一个构造函数必须是默认值。一个构造函数必须是仅限x和y的构造函数。一个构造函数必须是x、y和speed构造函数。您必须提供一个equals方法。equals()方法应该比较两个Cruiser对象的属性。必须提供一个toString()方法。toString()应该返回巡洋舰的x、y和速度 当我编译它时,它说“类Cruiser是公共的,应该在Cruiser.java中声明” 当我这样做时,我的IDE在公共布尔值等于后会如预期的那样显示“;”。但这并不能解释为什么在方法中需要分号 这就是我目前所拥有的Ap计算机科学Java接口和比较方法困境,java,oop,interface,constructor,compare,Java,Oop,Interface,Constructor,Compare,我应该编写一个Cruiser类来实现Locatable接口。巡洋舰将具有x、y和速度属性。x、 y和速度是整数。您必须为class Cruiser提供3个构造函数。Class Cruiser必须实现可定位接口 一个构造函数必须是默认值。一个构造函数必须是仅限x和y的构造函数。一个构造函数必须是x、y和speed构造函数。您必须提供一个equals方法。equals()方法应该比较两个Cruiser对象的属性。必须提供一个toString()方法。toString()应该返回巡洋舰的x、y和速度
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;
}
}
}
下面是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
有两个属性x
和y
,以及在equals方法中,它是在比较它们 另见:
你有一艘性能为x,y,速度的巡洋舰a,还有一艘性能为x,y,速度的巡洋舰B。如果A.x==B.x,A.y==B.y,A.speed==B.speed均为真,则等于应返回真。因此,当所有参数相等时,巡洋舰A和巡洋舰B相等 编辑:以下代码应输入到Cruiser类中
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类中以与接口中相同的方式命名方法
编辑2:关于第二个问题:
您需要将文件Cruiser.java和Locatable.java分开。代码在这里运行良好您能花点时间正确对齐代码吗?这使我们更容易阅读。在像Eclipse或Netbeans这样的IDE中,您只需点击几下就可以做到这一点。我该如何编写呢?我是否必须更改/删除比较方法?我将在每个文件中写入什么?或者我会有两个名称不同的相同文件吗?我照你说的做了,但是Cruiser.java文件不会运行,因为它说我需要在public Cruiser()中使用分号。然而,public Cruiser()是一个默认构造函数,那么它究竟为什么需要一个分号呢?我如何将您的建议合并到我的代码中?你还知道如何实现接口吗?1)按照字面意思或几乎按照字面意思合并它(只需考虑与你的案例的类比)。2) 是的,我知道。这是实现接口公共接口可定位{public int getxPos();public int getyPos();}的正确方法吗?公共类Cruiser实现可定位{Yes。对我来说似乎是正确的。我刚刚更新了代码。你能检查一下并帮助我吗?它没有运行,当我编译它时,它会说“class Cruiser是公共的,应该在Cruiser.java中声明”但是当我创建一个名为Cruiser.java的新类并复制代码并粘贴到其中时,它会说“class Locatable是公共的,应该在Locatable.java中声明”。我不知道该怎么办,请帮助!