【问题标题】:Null Pointer Exception implementing a find method for a doubly linked list in Java空指针异常在 Java 中实现双向链表的查找方法
【发布时间】:2016-05-24 19:10:09
【问题描述】:

我正在尝试为双向链表实现查找方法。当我运行测试时,我的 find 方法不断收到空指针异常。

    public int find(Medication item) {
    MedicationNode curr = head;
    for (int k = 0; k < count; k++) {
        if (curr.item.equals(item)){         //error occurs on this line
            return k;
        }
        curr = curr.next;
    }
    return -1;
}

我得到空指针异常的测试部分在这里

        list.remove(m4);
    if (list.find(m4) != -1) {                  //error occurs on this line
        System.out.println("FAILURE");
        return;

我不确定如何解决这个问题,因为我的 find 方法似乎可以正常工作

【问题讨论】:

  • 如果 (curr.item != null && curr.item.equals(item)) 将是一个绷带修复,您确定 'count' 值得到正确维护吗?
  • 你从哪里得到 count 变量,它的值是多少?
  • 我认为问题出在计数变量上。即使这样做了,我仍然会遇到错误。

标签: java arrays linked-list singly-linked-list doubly-linked-list


【解决方案1】:

您的 find 方法中没有检查以确定列表中是否有任何元素。因此,在进入 for 循环之前,您需要先检查 head 或 curr 是否不为空。或者,正如 Jimmy 指出的那样,您没有正确跟踪您的计数。

更好的解决方案是不依赖于 count 并检查 curr.next 是否为空。比如:

public int find(Medication item) {
    MedicationNode curr = head;
    while(curr != null){
        if (curr.item != null && curr.item.equals(item)){ 
            return k;
        }
        curr = curr.next;
    }
    return -1;
}

【讨论】:

  • 这行得通,我的计数变量肯定是问题所在,因为我现在在涉及 size() 的其他测试中遇到问题
  • 太好了,请随意投票并将答案标记为正确。祝你的项目好运:)
【解决方案2】:

如果您的linkedList 实现是通过允许您的项目为null 来完成的,那么您的find() 中可能会出现空指针。只需替换这个

if (curr.item.equals(item)){ 

有了这个

if (curr.item != null && curr.item.equals(item)){ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多