比较器比较方法()int无法解除引用

时间:2014-01-13 22:06:09

标签: java compiler-errors int comparator dereference

我正在做一些任务工作,我遇到了一个问题。

我已经获得了这个示例代码:

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.

有什么想法吗?

5 个答案:

答案 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或大于d2d1,如果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;