当前位置: 首页 > 知识库问答 >
问题:

比较器比较方法()int不能被取消引用[重复]

益泰平
2023-03-14

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

我收到了这个示例代码

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.

有什么想法吗?

共有3个答案

许亦
2023-03-14

int 作为基元不是对象,因此没有任何方法。因此,当您尝试在其上调用 .compareTo 时,您会收到一个错误。

要比较整数,可以使用标准比较运算符

詹甫
2023-03-14

您不需要调用方法来比较primitiveints。事实上,正如你所发现的,你不能。

只需使用正常

只要确保遵循< code>compare的约定即可-如果< code>d1是“小于”< code>d2,如果< code>d1是“等于”< code>d2,或者< code>d1是“大于”< code>d2,则分别返回小于0、等于0或大于< code>0的< code>int。

比较其两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数。

厍书
2023-03-14

由于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());
    }
}
 类似资料:
  • 我在这里看到了一个如何使用比较器界面对 ArrayList 进行排序的示例,所以我尝试了一下。对于Strsing,它可以完美地工作,但是对于一个我想排序为整数的变量,它不会编译,说“int不能被取消引用”。 我能做什么才能使它工作并允许我按分数变量对ArrayList进行排序? 这是我的代码:

  • 问题内容: 因此,我在这里看到了一个示例,该示例如何使用Comparator接口对ArrayList进行排序,因此我进行了尝试。使用Strings可以很好地工作,但是我要排序的一个变量是Integer,它将无法编译,并说“不能取消引用int”。 我该怎么做才能使它起作用,并允许我按score变量对ArrayList进行排序? 这是我的代码: 谢谢您的帮助! 问题答案: 您不能在上调用方法;没有可以

  • 我有一个客户对象类,它有一些变量,并且已经实现了一个关于其中一个变量的比较器。然而,我需要为不同的变量last_name实现另一个比较器。 因为我的Customer类中不能有2个compareTo()方法,所以我决定在这里专门创建一个Comparing类 但一旦触及Collections.sort(客户); 它不会激活下面的公共int比较(Customer Customer_1,Customerc

  • 假设我有一个双人课 我希望对它进行排序,首先是第一个值,然后是第二个值。现在,如果我这样做 一切都很好,列表按对的第一个值排序,但如果我这样做 它因错误而失败 好吧,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它适用于comparing()而不适用于comparing()。然后比较()?

  • 我正在做一个关于java类的介绍的作业,该作业要求使用方法将温度从摄氏转换为华氏,反之亦然。它需要使用三种比较方法,而我无法弄清楚该把什么放进去。以下是说明: 三种比较方法: -此方法将另一个温度作为参数,如果调用对象具有与other相同的温度,则返回true,否则返回false。注意,摄氏温度可以等于华氏温度,如上式所示。 -如果调用对象的温度低于其他温度,则此方法将返回true,否则返回fal

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和