首页 > 解决方案 > 对无法正确实现 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

他们都没有奏效。所以我只是坚持这条线。如果有人可以看到我的问题或需要更多信息,请告诉我。谢谢。

标签: java

解决方案


您的 compareTo 方法采用 PhoneDirectoryEntry 类,因此它将比较两个 PhoneDirectoryEntry 对象。您在 for 循环中所做的是获取 PhoneDirectoryEntry 类中的姓氏,并调用字符串的 compareTo 方法。String 的 compareTo 方法是 java 实现的,不是你的 compareTo 方法。


推荐阅读