java - 双向链表查找法

标签 java doubly-linked-list

正在研究我的双向链表的搜索方法。我遇到了异常,但我似乎无法弄清楚如何在不获取异常的情况下遍历列表..

    public void searchEntryNode() {
    System.out.println("I'll search through each entry to pull up what you're looking for ");
    System.out.println("Type in what you want ");
    String searchEntry = keyboard.next();

    EntryNode n = head;
    while (head != null) {
        if (head.getFirstName().contains(searchEntry) || head.getLastName().contains(searchEntry) || head.getPhoneNum().contains(searchEntry) || head.getEmail().contains(searchEntry)) { 
            System.out.println("Found a matching entry");
            System.out.println(n.getFirstName() + " " + n.getLastName() + " " + n.getEmail() + " " + n.getPhoneNum());
        }

        if (head.getNext() != null) {
            head = head.getNext();
        }   
        else {
                System.out.println("That's all we found ");
                System.out.println();
                menu();
        }
    }
}

最佳答案

我没有你的行数,所以我在这里盲目猜测,但我会猜测这一行是你的问题:

if (head.getFirstName().contains(searchEntry) || head.getLastName().contains(searchEntry) || head.getPhoneNum().contains(searchEntry) || head.getEmail().contains(searchEntry))

您的其中一个条目很可能返回 null对于 getFirstName , getLastName , getPhoneNum ,或getEmail .

您必须检查每个不是 null在解除引用之前(你不能这样做 null.someMethod() )

执行此操作的一种方法:

string firstName = head.getFirstName();
string lastName = head.getLastName();
string phoneNum = head.getPhoneNum();
string email = head.getEmail();

if ((firstName != null && firstName.contains(searchEntry)) 
     || (lastName != null && lastName.contains(searchEntry)) 
     || (phoneNum != null && phoneNum.contains(searchEntry)) 
     || (email != null && email.contains(searchEntry)))

关于java - 双向链表查找法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559904/

相关文章:

java - 重新加载时发生 ClassCastException

java - AspectJ ITD : implementing a generic interface

algorithm - 通过后备数组中的索引交换双向链表中的项目

java - Camel 泉-WS。设置自定义 SOAP header

java - 运行 TextView 失败/Bug(单行选框)

java JScrollPane问题

c++ - 我当前实现的双向链表类是否需要重构迭代器 end() 功能?

c++ - 试图删除选定节点的双向链表

c - 这是创建双向链表的有效方法吗?

c - 为什么打印 012 而不是 123