当前位置: 首页 > 知识库问答 >
问题:

Ap Computer Science Java接口和比较方法困境

上官飞
2023-03-14

我应该编写一个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;
}
} 
}

共有2个答案

穆俊名
2023-03-14

你有一艘巡洋舰a,其性能为x,y,速度,你有一艘巡洋舰B,其性能为x,y,速度。如果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.代码在这里运行良好

柯新翰
2023-03-14

以下是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的内置类之一<因此,点有两个属性,即x和y,在其equals方法中,它是比较它们的。

另请参见:

java.awt.Point.equals

 类似资料:
  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 当我在浏览上面的接口时,在阅读了许多相同主题的站点后,我对这些接口的语法不是很清楚。 请考虑以下代码段: 如果每个查询都是可理解的。

  • 我有一个关于比较器接口的问题。在我的类下面实现了按长度而不是按字符值排序的默认排序的接口。 覆盖默认比较后,我使用对我的字符串数组进行排序。即使我覆盖了默认方法,如果我使用Arrays.sort,它会调用默认比较而不是我覆盖的方法。这是因为我显式调用了超类方法吗? 另一个问题是初始化接口本身。我知道您不能初始化接口,而是初始化一个类对象(实现所述接口)来引用接口可用的方法。在这种情况下,当我初始化

  • 我是java新手,试图理解一些概念。这是一段我不懂的代码。 我知道这是怎么回事,但不明白为什么这是允许的。因此,我的问题是: 从java文档中,比较器[T]是一个接口。比较器[水果]怎么样?我将假设它是一个类,因为它必须覆盖比较函数。 为什么可以在{}中使用非参数构造函数和类定义来初始化FruitName比较器?我在比较器[T]的javadoc中没有找到这样的构造函数声明。 如有任何意见,将不胜感

  • 本文向大家介绍对比Java中的Comparable排序接口和Comparator比较器接口,包括了对比Java中的Comparable排序接口和Comparator比较器接口的使用技巧和注意事项,需要的朋友参考一下 Comparable Comparable 是排序接口。 若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在

  • 问题内容: 我有两个对象。是类型。类型是隐藏对象的接口。定义为: 它还有一些额外的方法。但是,由于该类“未导出”,所以我无法将任何一个键都转换为一个,因为那没有实现,所以我也无法转换为一个,并且我无法访问the 或from,因为我不应该知道我有一个对象。 我应该怎么比较,并且是相同的密钥? 问题答案: 如前所述,您不能使用类型断言,因为您不能引用未导出的type 。 使用软件包可以实现您想要的一切