28

Вопрос по java – Как мне написать метод CompareTo, который сравнивает объекты?

Я изучаю массивы, и в основном у меня есть массив, который собирает фамилию, имя и счет.

Мне нужно написатьcompareTo метод, который будет сравнивать фамилию, а затем имя, чтобы список можно было отсортировать в алфавитном порядке, начиная с фамилий, а затем, если два человека имеют одинаковую фамилию, будет сортироваться имя.

Я в замешательстве, потому что вся информация в моей книге сравнивает числа, а не объекты и строки.

Вот что я кодировал до сих пор. Я знаю, что это неправильно, но это, по крайней мере, объясняет то, что я думаю, что я делаю:

public int compare(Object obj) // creating a method to compare 
{   
    Student s = (Student) obj; // creating a student object

    // I guess here I'm telling it to compare the last names?
    int studentCompare = this.lastName.compareTo(s.getLastName()); 

    if (studentCompare != 0)
        return studentCompare;
    else 
    {
        if (this.getLastName() < s.getLastName())
            return - 1;

        if (this.getLastName() > s.getLastName())
            return 1;
    }
    return 0;
}

Я знаю< а также> символы неверны, но, как я уже сказал, моя книга показывает только, как использоватьcompareTo.

Error: User Rate Limit Exceeded<code>someString &lt; someOtherString</code>Error: User Rate Limit Exceeded<code>compareTo</code>...

Apr 04, 2012, 7:01 PMот

9ответов

0

Error: User Rate Limit Exceeded

public class Student() implements Comparable<Student>{

public int compareTo(Object obj){
if(this==obj){
    return 0;
}
if(obj!=null){
    String objName = ((Student)obj).getName();
    return this.name.comapreTo.(objName);
}
}
0

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

public int Compare(Object obj)
{       
    Student student = (Student) obj;
    int result = this.getLastName().compareTo( student.getLastName() );

    if ( result == 0 )
    {
        result = this.getFirstName().compareTo( student.getFirstName() );
    }

    return result;
}
24

Error: User Rate Limit Exceeded

int studentCompare = this.lastName.compareTo(s.getLastName()); 

Error: User Rate Limit Exceeded

if (this.getLastName() < s.getLastName())

Use if (this.getLastName().compareTo(s.getLastName()) < 0)Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

int d = getFirstName().compareTo(s.getFirstName());
if (d == 0)
    d = getLastName().compareTo(s.getLastName());
return d;
1

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

18

Error: User Rate Limit Exceeded

Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Error: User Rate Limit Exceeded

class Jedi implements Comparable<Jedi> {

    private final String name;
    private final int age;
        //...
}

Error: User Rate Limit Exceeded

public int compareTo(Jedi jedi){
    return this.age > jedi.age ? 1 : this.age < jedi.age ? -1 : 0;
}

Error: User Rate Limit ExceededcompareToError: User Rate Limit ExceededComparableError: User Rate Limit Exceededa natural orderError: User Rate Limit Exceededby default.

Error: User Rate Limit ExceededComparableError: User Rate Limit ExceededcompareToError: User Rate Limit Exceeded

public int compareTo(Jedi jedi){
    return this.name.compareTo(jedi.getName());
}

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

public int compareTo(Jedi jedi){
    int result = this.name.compareTo(jedi.getName());
    if(result == 0){
        result = this.age > jedi.age ? 1 : this.age < jedi.age ? -1 : 0;
    }
    return result;
}

Error: User Rate Limit Exceeded

Jedi[] jediAcademy = {new Jedi("Obiwan",80), new Jedi("Anakin", 30), ..}

Error: User Rate Limit Exceededjava.util.ArraysError: User Rate Limit Exceeded

Arrays.sort(jediAcademy);

Error: User Rate Limit ExceededArrays.sortError: User Rate Limit ExceededcompareToError: User Rate Limit Exceeded

0

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

if(this.lastName.compareTo(s.getLastName() == 0)//last names are the same
1

Error: User Rate Limit ExceededComparatorError: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit ExceededObjectError: User Rate Limit ExceededStudent.

Error: User Rate Limit ExceededStringError: User Rate Limit ExceededlastNameError: User Rate Limit ExceededfirstNameError: User Rate Limit ExceededcompareToError: User Rate Limit Exceeded

2

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

String.compareTo()Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededSystem.out.println( "Test".compareTo("Tesu") );Error: User Rate Limit ExceededSystem.out.println( "Test".compareTo("Tesa") );Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

return this.lastName.equals(s.getLastName()) ? this.lastName.compareTo(s.getLastName()) : this.firstName.compareTo(s.getFirstName());

Error: User Rate Limit Exceeded

this.lastName.equals(s.getLastName())Error: User Rate Limit Exceededthis.lastName.compareTo(s.getLastName())Error: User Rate Limit Exceededthis.firstName.compareTo(s.getFirstName())Error: User Rate Limit Exceeded

1

if (s.compareTo(t) > 0)Error: User Rate Limit Exceeded

    public int Compare(Object obj) // creating a method to compare {   
        Student s = (Student) obj; //creating a student object

        // compare last names
        return  this.lastName.compareTo(s.getLastName());    
    }

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

RelatedQuestions