2014-11-09 2 views
0

В моей программе я пытаюсь сравнить имена по фамилии, а если они совпадают, сравните их, используя первое имя. Однако я не могу понять, как сравнивать строки.CompareTo (Object o), используемый для сравнения строк в java

Может ли кто-нибудь помочь мне с этим?

public class Student implements IComparable 
{ 
String firstName; 
String lastName; 
int score; 

public Student() 
{ 

} 

public void setFirstName(String firstName) 
{ 
    this.firstName = firstName; 
} 
public String getFirstName() 
{ 
    return firstName; 
} 

public void getLastName(String lastName) 
{ 
    this.lastName = lastName; 
} 
public String getLastName() 
{ 
    return lastName; 
} 

public void getScore(int score) 
{ 
    this.score = score; 
} 
public int getScore() 
{ 
    return score; 
} 

@Override 
public int compareTo(Object o) 
{ 
    //Compares Student objects by last name. If the last names are the same 
    //it compares by first name. 
    Student s = (Student) o; 

    if (this.getLastName().toUpperCase() < s.getLastName().toUpperCase()) 
     return -1; 
    else if (this.getLastName().toUpperCase() > s.getLastName().toUpperCase()) 
     return 1; 
    else 
    { 
     if(this.getFirstName().toUpperCase(< s.getFirstName().toUpperCase() 
      return -1; 
     else if (this.getFirstName().toUpperCase(> s.getFirstName().toUpperCase() 
      return 1; 
     else 
      return 0; 
    } 
} 
} 
+0

Что такое 'IComparable'? В Java «Comparable» является общим. –

ответ

5

Не делать вещи более сложными:

  • String класс уже обеспечивает compareToIgnoreCase метод
  • значение, возвращенное сравнить методы String уже хорошо, чтобы быть непосредственно вернулся

В принципе, та же функциональность может быть выражена с помощью:

int compare = getLastName().compareToIgnoreCase(o.getLastName()); 
return compare == 0 ? getFirstName().compareToIgnoreCase(o.getFirstName()) : compare; 

Учтите, что вам необходимо проверить, что o instanceof Student, если у вас есть аргумент Object.

Я не понимаю, почему вы используете пользовательский интерфейс IComparable, который очень похож на тот, который представлен на C#, поскольку Java предоставляет Comparable<T>, который является общим и не требует проверки типа времени выполнения аргумента (поскольку это не Object больше, а T).

+0

instanceof уже выполняет нулевую проверку и возвращает false, если он равен нулю –

+0

Если вы проверили 'o instanceof Student', вам также не нужно проверять' o! = Null', так как 'instanceof' всегда возвращает' false' для ' null'. –

+0

Спасибо. Это очень помогло. Я был слишком сложным, потому что я забыл, что строки можно сравнить с этим. –

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