2014-01-13 2 views
1

Я выполняю некоторые задания, и я столкнулся с проблемой.Метод сравнения компаратора() int не может быть разыменован

Я дал этот пример кода:

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. 

Есть идеи?

ответ

2

Вам не нужно использовать метод сравнения примитива int s. На самом деле, как вы обнаружили, вы не можете.

Просто используйте нормальные <, > и == операторы для сравнения int s.

Просто убедитесь, что следовать contract of compare - возвращать int меньше 0, равное 0, или больше, чем 0, если d1 «меньше, чем» d2, если d1 является «равно» d2 или d1 является "больше, чем" d2, соответственно.

Сравнивает два аргумента для заказа. Возвращает отрицательное целое число, ноль или положительное целое число, поскольку первый аргумент меньше, равен или больше второго.

1

int быть примитивным, не является объектом, и, таким образом, не имеет каких-либо методов, таким образом, когда вы пытаетесь позвонить .compareTo на него, вы получите сообщение об ошибке.

Чтобы сравнить ints, вы можете использовать стандартные операторы сравнения < > ==, * или * вы можете обернуть его в объект Integer и использовать метод сравнения, как вы сейчас делаете. Хотя первый благоприятен.

1

Вы получаете это сообщение об ошибке, так как 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()); 
    } 
} 
0

// Если Person.getName() возвращает строку, то вы можете просто сделать следующее // реализовать Сопоставимые:

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 
    } 
} 
+0

* «Если Person.getName() возвращает строку, вы можете просто сделать следующее для ...» * создать ошибку времени компиляции. – Tom

Смежные вопросы