我必须使用此addInOrder方法将人们添加到我的LinkedList中,但要按照姓氏和名字的字母顺序排列。将人员添加到列表后,我必须返回true或false,这取决于是否添加了该人员。我创建了一个compareTo方法,如果两个条目具有相同的名字和名称,则返回0。如果lastName在比较对象之前按字母顺序出现,则它将返回-1(如果lastName相同,则求助于firstName)。最后,如果名称是按字母顺序比较的,则它将返回1。我已经多次测试了compareTo方法,并且可以确认它是否有效。这是它的代码:
public int compareTo(PhoneDirectoryEntry other) {
if (this.firstName.equals(other.firstName) && this.lastName.equals(other.lastName)) {
return 0;
} else if (this.lastName.compareTo(other.lastName) < 0) {
return -1;
} else if (this.lastName.compareTo(other.lastName) > 0) {
return 1;
} else if (this.firstName.compareTo(other.firstName) < 0) {
return -1;
} else
return 1;
}
}
我的问题取决于我的addInOrder方法。
public boolean addInOrder(String firstName, String lastName, String phoneNumber) {
//to be completed by you
if (list.isEmpty()) {
PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
list.add(person);
return true;
} for (int i = 0; i < list.size(); i++) {
if (list.get(i).getLastName().compareTo(lastName) == -1) {
PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
list.add(i, person);
return true;
} else if (list.get(i).getLastName().compareTo(lastName) == 1) {
PhoneDirectoryEntry person = new PhoneDirectoryEntry(firstName, lastName, phoneNumber);
list.add(i++, person);
return true;
}
}
return false;
}
我的第一个if语句运行良好,并且始终可以将一个人添加到空白列表中。 for循环也会运行。问题出在if语句内。我已经尝试过if语句的所有变体,例如:
list.get(i).getLastName().compareTo(lastName) == -1 || list.get(i).getFirstName().compareTo(firstName) == 1
它们都没有起作用。所以我只是坚持这一行。如果有人可以看到我的问题或需要更多信息,请告诉我。谢谢。
答案 0 :(得分:0)
您的compareTo方法采用PhoneDirectoryEntry类,因此它将比较两个PhoneDirectoryEntry对象。在for循环中,您要做的是获取PhoneDirectoryEntry类中的姓氏,然后调用字符串的compareTo方法。字符串的compareTo方法是由Java实现的,而不是您的compareTo方法。