6

我遵循了一个教程,但未能为我Country的.ComparableBST

主要的:

BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);

国家级:

public int compareTo(Object anotherCountry) throws ClassCastException {
    if (!(anotherCountry instanceof Country))
        throw new ClassCastException("A Country object expected.");
    String anotherCountryName = ((Country) anotherCountry).getName();  
    int i = this.name.compareTo(anotherCountryName);
    if(i < 0){
        return -1;
    } else {
        return 0;
    }
}

错误:

@Override
public int compareTo(Object anotherCountry) throws ClassCastException {
    if (!(anotherCountry instanceof Country))
      throw new ClassCastException("A Country object expected.");
    String anotherCountryName = ((Country) anotherCountry).getName();  
    return this.name.compareTo(anotherCountryName);

Description Resource    Path    Location    Type

名称冲突: Country 类型的方法 compareTo(Object) 与 Comparable 类型的 compareTo(T) 具有相同的擦除,但不会覆盖 Country.java /Lab2_prob 4/src 第 17 行 Java 问题

Description Resource    Path    Location    Type
The method compareTo(Object) of type Country must override or implement a supertype method  Country.java    /Lab2_prob 4/src    line 17 Java Problem

和类:

public class Country implements Comparable<Country>{
    private String name;
    private String capital;
    private int area;

Description Resource    Path    Location    Type

Country 类型必须实现继承的抽象方法 Comparable.compareTo(Country) Country.java /Lab2_prob 4/src line 2 Java Problem

4

2 回答 2

21

你的Country班级应该实现Comparable

public class Country implements Comparable<Country>

那么你的compareTo方法应该是这样的:

@Override
public int compareTo(Country anotherCountry) {
    return this.name.compareTo(anotherCountry.getName());
}

注意 的签名compareTo。参数可以(并且必须)是 类型Country,而不是Object。这是必需的,因为Comparable. 好处是您不必再检查类型。缺点是您只能与Country其他Country对象(或其子类型)进行比较,但在大多数情况下,这正是您想要的。如果不是,您必须更改类型参数,例如,如果您再次使用can beComparable<Object>的签名。您可以在此处阅读有关泛型的更多信息。compareToObject

于 2012-10-24T14:50:17.967 回答
5

一个Comparable应该返回:

负整数、零或正整数,因为此对象小于、等于或大于指定对象。

但是,您的代码仅返回 -1 或 0,这是不正确的;这意味着this可以小于另一个对象,或者等于,但不能更大!

无需修改返回的值name.compareTo()- 您可以直接返回它们。

于 2012-10-24T14:47:56.537 回答