我正在尝试在我的某个课程上实施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'的句子
答案 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());
}
}
这是一个最小的代码。您必须检查空值。