Java 检查Null进入无限循环

Java 检查Null进入无限循环,java,object,null,nullpointerexception,structure,Java,Object,Null,Nullpointerexception,Structure,我得到的数据结构如下: [对象]->[对象]->[对象] 每个对象都有一个指向另一个对象的右指针 while (currentParcel.getRight() != null) { currentParcel = currentParcel.getRight(); } 这段代码进入无限循环 根据我的逻辑,它应该尽可能正确,并且只有当它达到null时,currentParcel对象才应该是指针指向null的最后一个对象(右边没有对象) 如何处理无限循环 我试着用下面的方式来写: boo

我得到的数据结构如下:

[对象]->[对象]->[对象]

每个对象都有一个指向另一个对象的右指针

while (currentParcel.getRight() != null) {
    currentParcel = currentParcel.getRight();
}
这段代码进入无限循环

根据我的逻辑,它应该尽可能正确,并且只有当它达到null时,currentParcel对象才应该是指针指向null的最后一个对象(右边没有对象)

如何处理无限循环

我试着用下面的方式来写:

boolean found = false;
try {
   while (found == false) {
       currentParcel = currentParcel.getRight();

       if (currentParcel.getRight() == null)
       {
           currentParcel.addRight(p);
           System.out.println(currentParcel);
           found = true;
       } 

   }
} 
catch (NullPointerException e) {}

但这对我不起作用。它只是没有尽可能向右移动。

您的循环正常,问题出在其他地方,这很好

    Parcel p1 = new Parcel();
    Parcel p2 = new Parcel();
    Parcel p3 = new Parcel();
    p1.setRight(p2);
    p2.setRight(p3);
    Parcel currentParcel = p1;
    while (currentParcel.getRight() != null) {
        currentParcel = currentParcel.getRight();
    }

在链表结构中有一个循环链接。要对此进行调试,请使用调试器或打印while循环中的对象以查看它们是什么。这样你就会发现问题所在。确保对象有一个合适的
toString()
方法,并在循环内部打印出来,作为识别循环连接的一种方法。同样,你不需要“最后一个点到第一个点”来实现这一点,但是你所需要的只是在某个地方存在一个循环连接。你最好找到它。

你检查过链表本身了吗?你可能有一个循环链表。此外,你永远也不应该抓到NPE。它肯定不是圆形的。我这里没有使用linkedlist。在对象中简单地实现了上述数据结构。您可能没有使用核心Java LinkedList类,但您已经创建了自己的链表数据结构,在您说“它肯定不是循环的”之前,最好检查一下。在你找到解决方案之前,不要忽视问题的任何可能原因。是的,你是对的。实际上我有树形结构。这里没有写有指向另一个对象的指针。因此,基本上一个对象有两个指针(一个指向顶部,另一个指向右侧)。最后一个对象不指向第一个对象。我的代码中没有类似的内容。请确保您的对象有一个合适的
toString()
方法,并在循环中打印出来,然后您将看到循环列表。我没有说“最后一点指向第一点”,只是说在某个地方有一个循环连接。你最好找到它。问题是我的结构中只有一个对象。当我尝试添加另一个对象时,它应该找到最右边的对象并添加指向新对象的指针。添加第一个对象,但不添加另一个对象。它被困在这个循环中。ToStand方法在列表中只显示了一个对象。@ LythII:考虑创建和发布一个我们可以编译和运行的小程序,它使用代码的核心并再现您的问题。如果您尝试这样做,您将在隔离问题时看到问题。