我正在学习数组,基本上我有一个可以收集姓氏,名字和分数的数组。
我需要编写一个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。
<
>
这是比较字符串的正确方法:
int studentCompare = this.lastName.compareTo(s.getLastName());
这甚至不会编译:
if (this.getLastName() < s.getLastName())
使用 if (this.getLastName().compareTo(s.getLastName()) < 0)代替。
if (this.getLastName().compareTo(s.getLastName()) < 0)
因此,要比较拳头/姓氏顺序,您需要:
int d = getFirstName().compareTo(s.getFirstName()); if (d == 0) d = getLastName().compareTo(s.getLastName()); return d;