Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ap计算机科学Java接口和比较方法困境_Java_Oop_Interface_Constructor_Compare - Fatal编程技术网

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

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和速度

我应该编写一个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在公共布尔值等于后会如预期的那样显示“;”。但这并不能解释为什么在方法中需要分号

这就是我目前所拥有的

 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中声明”。我不知道该怎么办,请帮助!