java - 对无法正确实现 compareTo 方法的 addInOrder 方法进行故障排除
问题描述
我必须使用此 addInOrder 方法将人员添加到我的 LinkedList,但按字母顺序按 lastName 然后 firstName。一旦我将这个人添加到列表中,我必须根据它是否添加它来返回 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
他们都没有奏效。所以我只是坚持这条线。如果有人可以看到我的问题或需要更多信息,请告诉我。谢谢。
解决方案
您的 compareTo 方法采用 PhoneDirectoryEntry 类,因此它将比较两个 PhoneDirectoryEntry 对象。您在 for 循环中所做的是获取 PhoneDirectoryEntry 类中的姓氏,并调用字符串的 compareTo 方法。String 的 compareTo 方法是 java 实现的,不是你的 compareTo 方法。
推荐阅读
- jquery - 单击功能上的 Ajax - 不响应按钮
- c# - Xamarin 表单中的 ObservableCollection 问题
- javascript - 从类的方法返回查询结果
- python - pip安装报错:包目录不存在
- arrays - 关于二维字符数组,哪个答案是正确的
- javascript - 如何在使用 FETCH 和 Vanilla Javascript 时解决 CORS(Access-Control-Allow-Origin)和 CORB 问题
- flutter - Flutter - 未处理的异常:类型'String'不是'index'类型'int'的子类型
- python - 使用一组方法和属性扩展独立类(包装器)
- c# - Xamarin Forms 将图像作为 POST 上传到网页
- android - 自动授予 Uri 权限