2015-09-20 148 views
1

所以,我在这里遇到了一些问题。我在线程得到一个错误的双链表 - 插入方法

if(Front.data==null) 

异常 “主” 在 DoubleLinky.insert(DoubleLinky.java:17)显示java.lang.NullPointerException

我该如何解决这个问题,我实际上很难学习双链表是如何工作的。

public class DoubleLinky<AnyType> implements DoublyLinkedList<AnyType> 
{ 

    private MyDoubleNode<AnyType> Front = null; 
    MyDoubleNode<AnyType> Tail = new MyDoubleNode<AnyType>(); 


    public void insert(AnyType x) 
    { 
     if(lookup(x)==true) 
      return; 

     if(Front.data == null) 
     { 
      Front.data = x; 
      return; 
     } 

     if(Tail.data == null) 
     { 
      Tail.data = x; 
      return; 
     } 

     MyDoubleNode<AnyType> A = Front; 
     MyDoubleNode<AnyType> C = Tail.next; 
     MyDoubleNode<AnyType> B = new MyDoubleNode<AnyType>(x, C, A); 
     A.next = B; 
     C.prev = B; 

    } 
+0

@SotiriosDelimanolis那么,也许这个问题是在你的水平上重复,但它不是在OP的水平。如果他愿意接受你的技能,他不必打开这个问题。在我看来,你现在正在关闭狂欢。 – peterh

+0

@peterh重复是我们所说的_canonical answer_。每天都会问这个问题多次。我们不会开始回答每一个事件。规范的答案解释了NPE是什么以及如何调试它。这就是你应该需要的。除非抛出代码的东西极其模糊,否则没有理由重复。只有一种方法'Front.data == null'可以抛出'NullPointerException'。 –

+0

@peterh您可以进一步讨论在Meta上重复关闭的原因(或重复的重复项)。 –

回答

1

在这条线Front初始化为null

private MyDoubleNode<AnyType> Front = null; 

当您试图访问一个成员:

if (Front.data == null) 

你自然得到了NullPointerException

Front需要访问之前被初始化其成员。例如。

private MyDoubleNode<AnyType> Front = new MyDoubleNode<AnyType>(); 

乍一看,您可能想要将Tail初始化为空。然后在使用它之前检查它是否为空。例如。

if (Tail != null && Tail.data == null) 
+0

即使我从顶部删除它。我仍然得到同样的错误。 – WannaBeCoder

+0

@WannaBeCoder在访问其成员之前,'Front'需要被初始化。我会更新答案。 –

1

这意味着您的Front对象本身为null。您可以通过首先检查您的Front是否为null,然后从其访问任何成员数据之前解决此问题。在稍后在此方法中为Front提供一个值之前,您尝试访问Front.date。