我正在做一些任务工作,我遇到了一个问题。
我已经获得了这个示例代码:
public class PersonNameComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
int retValue = p1.getName().compareTo(p2.getName());
if (retValue != 0)
return retValue;
else if (p1.getAge() < p2.getAge())
return -1;
else if (p1.getAge() > p2.getAge())
return 1;
else
return 0;
}
}
然而,当我尝试这样做时,会发生这种情况:
public class DVDComparator implements Comparator <DVD> {
public int compare(DVD d1,DVD d2)
{
int stars1 = d1.getNoOfStars().compareTo(d2.getNoOfStars());
//ERROR - int cannot be dereferenced.
有什么想法吗?
答案 0 :(得分:4)
您收到此错误消息,因为getNoOfStars()返回一个原语int,并且没有为原始类型定义的compareTo()方法。
如果您正在使用Java SE 7,则可以使用以下内容:
public class DVDComparator implements Comparator <DVD> {
public int compare(DVD d1,DVD d2){
return Integer.compare(d1.getNoOfStars(), d2.getNoOfStars());
}
}
答案 1 :(得分:2)
您无需调用方法来比较基元int
。事实上,正如你所发现的那样,你做不到。
只需使用普通<
,>
和==
运算符即可比较int
。
只需确保关注contract of compare
- 如果int
小于0
,则返回d1
小于0,等于0或大于d2
“d1
,如果d2
”等于“d1
,或d2
分别”大于“{{1}}。
比较其订单的两个参数。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。
答案 2 :(得分:1)
int
是一个原语,不是一个对象,因此没有任何方法,因此当你尝试在其上调用.compareTo时,就会出现错误。
要比较整数,您可以使用标准比较运算符< > ==
,*或*您可以将其包装在Integer
对象中,并使用您现在正在执行的比较方法。虽然前者是有利的。
答案 3 :(得分:0)
//如果Person.getName()返回一个字符串,那么你可以简单地执行以下操作来//实现Comparable:
public class PersonNameComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
return p1.getName() - p2.getName(); // It's the ninja way to do it
}
}
答案 4 :(得分:0)
您可以通过this链接找到上述错误的原因。 您可以使用以下易于理解的方法之一。 (按升序排序)
if(d1.getNoOfStars() != d2.getNoOfStars())
return d1.d1.getNoOfStars() - d2.getNoOfStars();
或
if(d1.getNoOfStars() != d2.getNoOfStars())
return d1.d1.getNoOfStars() > d2.getNoOfStars() ? 1 : -1;