compareTo()方法在两个类之间设置

时间:2015-04-16 07:37:09

标签: java

我正在尝试在我的某个课程上实施compareTo()方法,但是遇到“步骤”时遇到问题,只需要解释我做错了什么。

我想使用compareTo()方法比较地方和特定事物的地方

我收到错误:
方法compareTo(Venue)未定义Venue类型
compareTo()方法的第一行。

我认为这种情况正在发生,因为我没有正确地从Place(String name)继承Place class,我认为这需要能够实际比较2个地方。

我不确定这是怎么做的,并且对将要/将要进行的内容的解释将进一步澄清

第1课:

public class Place {
    // the name of the place
    private String name;
    // invariant: name != null 

    // Creates a new place with the given name.
    public Place(String name){
    if (name != null){
        this.name = name;   
    } else 
        throw new NullPointerException();
    }

    //returns the name of a place
    public String getName(){
        return name;
    }
}

第2课:

public class Thing implements Comparable<Thing>{
    // the name of the place at which the thing occurs
    private Place place;

    // Creates a new thing for the given place
     public Thing(Place place) {
        if (place == null){
            throw new NullPointerException("Place cannot be null");
        }
        this.place = place;
    }

    // Returns the place of the thing.
    public Place getPlace() {
        return place;
    }

    public int compareTo(Thing thing) {
        if (getPlace().compareTo(thing.getPlace()) > 0){
            return 1;

        } else if //..rest of compareTo method  
        }
    }
}

原谅可怜的措辞,因为我发现很难将我的思维过程变成使'java sense'的句子

3 个答案:

答案 0 :(得分:1)

如果您想在Place课程中使用它,Thing课程需要compareTo()方法。

public class Place implements Comparable<Place> {
// the name of the place
private String name;
// invariant: name != null 

// Creates a new place with the given name.
public Place(String name){
if (name != null){
    this.name = name;   
} else 
    throw new NullPointerException();
}

//returns the name of a place
public String getName(){
    return name;
}

public int compareTo(Place other) {
    // do something here
}

}

在您的代码中,编译器在调用getPlace().compareTo(...)时不知道该怎么做,因为该方法尚未在Place类中定义,getPlace()返回。

答案 1 :(得分:0)

您可以在Place类中创建自定义比较器,并使用它来比较Place的{​​{1}}:

name

您可以像这样使用自定义比较器:

public class Place {
    private String name;

    public Place(String name) {
        if (name != null) {
            this.name = name;   
        } else {
            throw new NullPointerException();
        }
    }

    public String getName() {
        return name;
    }

    public static Comparator<Place> PlaceNameComparator = new Comparator<Place>() {
        public int compare(Place place1, Place place2) {
            String placeName1 = place1.getName();
            String placeName2 = place2.getName();

            return placeName1.compareTo(placeName2);
        }
    };
}

<强>输出:

Place[] places = new Place[3];
places[0] = new Place("New York");
places[1] = new Place("Texas");
places[2] = new Place("Denver");

Arrays.sort(places, Place.PlaceNameComparator);
for (int i=0; i < places.length; ++i)
    System.out.println(places[i].getName());

我更倾向于使用比较器而不是覆盖Denver New York Texas ,因为后者会根据一种行为将您的类限制为比较。另一方面,您可以创建与比较相同数量的比较器。

答案 2 :(得分:0)

您必须将可比较接口添加到Place或直接检查名称的值。

这样的东西
public class Place implements Comparable {
    public int compareTo(Place place) {
        return name.compareTo(place.getName());
    }
}

或更改Thing compareTo

public class Thing implements Comparable<Thing> {
    public int compareTo(Thing other) {
        return place.getName().compareTo(other.getPlace().getName());
    }
}

这是一个最小的代码。您必须检查空值。