Java 用布尔方法使用链表

Java 用布尔方法使用链表,java,Java,我需要使用包含多个布尔方法的链接列表创建一个电话簿。其中一个方法是insert,它被暂停以在电话簿中输入新的人员,如果该人员已经存在,则该方法电话簿不应更改。我在实现此方法时遇到问题,特别是在我应该比较用户输入的姓名和电话簿中已有的姓名的部分,这是我的代码 class PhoneBookList implements PhoneBook { private int size = 0; Node head; private static final class Node

我需要使用包含多个布尔方法的链接列表创建一个电话簿。其中一个方法是insert,它被暂停以在电话簿中输入新的人员,如果该人员已经存在,则该方法电话簿不应更改。我在实现此方法时遇到问题,特别是在我应该比较用户输入的姓名和电话簿中已有的姓名的部分,这是我的代码

class PhoneBookList implements PhoneBook {
    private int size = 0;
    Node head;

    private static final class Node {
        final Person person;
        Node next;

        Node(Person person) {
            this.person = person;
        }
    }

    public boolean insert(Person person) {
        Node n = new Node(person); 
        Node p = head,prev = null;


        if(p == null) {
            head = n;
            size++;
            return true;
        }

        int comparison = p.name.compareTo(n.name);

        if(comparison < 0) {
            n.next = p;
            p = n;
            size++;// 
            return true;
        }

        if(comparison == 0) {
            return false;

        }

        Node current = p;
        while(current.next !=null && current.next.person < person) {
            current = current.next;
        }
        if(current.next !=null && current.next.person == person) {
            return false;

        }

        n.next = current.next;
    current.next = n;
        size++;
    return true;
    }
}
类PhoneBookList实现电话簿{
私有整数大小=0;
节点头;
私有静态最终类节点{
最后一人;
节点下一步;
节点(个人){
这个人=人;
}
}
公共布尔插入(个人){
节点n=新节点(人);
节点p=头,上一个=空;
if(p==null){
水头=n;
大小++;
返回true;
}
int comparison=p.name.comparieto(n.name);
如果(比较<0){
n、 next=p;
p=n;
大小++;//
返回true;
}
如果(比较==0){
返回false;
}
节点电流=p;
while(current.next!=null&¤t.next.person
我们必须明确使用此compareTo方法,但我无法使其工作。任何指导。以下是错误:

PhoneBookList.java:25: error: cannot find symbol
                int comparison = p.name.compareTo(n.name);
                                                   ^
  symbol:   variable name
  location: variable n of type Node
PhoneBookList.java:25: error: cannot find symbol
                int comparison = p.name.compareTo(n.name);
                                  ^
  symbol:   variable name
  location: variable p of type Node
PhoneBookList.java:40: error: bad operand types for binary operator '<'
                while(current.next !=null && current.next.person < person) {
                                                                 ^
  first type:  Person
  second type: Person
                                                                 ^
  first type:  Person
  second type: Person
PhoneBookList.java:25:错误:找不到符号
int comparison=p.name.comparieto(n.name);
^
符号:变量名
位置:节点类型的变量n
PhoneBookList.java:25:错误:找不到符号
int comparison=p.name.comparieto(n.name);
^
符号:变量名
位置:节点类型的变量p

PhoneBookList.java:40:错误:二进制运算符“的操作数类型错误代码中的一些注释:

  • 它有一些不应该存在的if,因为它们不处理特殊情况
  • 它对类Person使用am比较运算符,如果您真的实现了,那么使用compareTo方法是没有意义的
  • 我给您留下了一个更简洁的新版本,它只在必要时创建新对象 如果尚未实现比较运算符,则应通过a.name.compareTo将a
    希望这能有所帮助。

    要检查列表中是否已经有人,您需要遍历列表中的所有节点,并将节点中的每个人的姓名与要插入的人的姓名对齐

    class PhoneBookList implements PhoneBook {
        private int size = 0;
        Node head = null;
    
        private static final class Node {
            final Person person;
            Node next;
    
            Node(Person person) {
                this.person = person;
            }
        }
    
        public boolean insert(Person person) {
            Node n = new Node(person); 
            Node p = head;
    
            if(p == null) {
                head = n;
                size++;
                return true;
            } else {
    
                Node temp = p;
                int comparison;
                while(temp.next != null) {
                    comparison = temp.person.name.compareTo(person.name);
                    if(comparison == 0){
                        return false;
                    }
                    temp = temp.next;
                }
                temp.next = n;
                size++;
                return true;
            }
    
        }
    }
    

    因此,您没有实现比较运算符。那么为了帮助您,我必须了解Person类的实现。在这里,您必须输入运算符。

    如果您想比较名称,为什么不使用
    equals()
    并编写一个搜索名称的方法,而不是在insert方法中检查名称是否存在。嘿,谢谢您的反馈,正如我在作业中所说的,我们被告知必须使用此比较方法不起作用意味着您的代码是否有任何错误是的,确切地说,得到了这个特定的错误:PhoneBookList.java:40:error:binary operator的操作数类型错误“
    p.person>person
    为什么要比较对象谢谢您的回答。我已经试过编写这个程序,但仍然得到if(p.person>person)行的错误。
    class PhoneBookList implements PhoneBook {
        private int size = 0;
        Node head = null;
    
        private static final class Node {
            final Person person;
            Node next;
    
            Node(Person person) {
                this.person = person;
            }
        }
    
        public boolean insert(Person person) {
            Node n = new Node(person); 
            Node p = head;
    
            if(p == null) {
                head = n;
                size++;
                return true;
            } else {
    
                Node temp = p;
                int comparison;
                while(temp.next != null) {
                    comparison = temp.person.name.compareTo(person.name);
                    if(comparison == 0){
                        return false;
                    }
                    temp = temp.next;
                }
                temp.next = n;
                size++;
                return true;
            }
    
        }
    }