解决我的addInOrder方法无法正确实现我的compareTo方法的问题

时间:2019-10-07 22:42:19

标签: java

我必须使用此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

它们都没有起作用。所以我只是坚持这一行。如果有人可以看到我的问题或需要更多信息,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

您的compareTo方法采用PhoneDirectoryEntry类,因此它将比较两个PhoneDirectoryEntry对象。在for循环中,您要做的是获取PhoneDirectoryEntry类中的姓氏,然后调用字符串的compareTo方法。字符串的compareTo方法是由Java实现的,而不是您的compareTo方法。