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:考虑创建和发布一个我们可以编译和运行的小程序,它使用代码的核心并再现您的问题。如果您尝试这样做,您将在隔离问题时看到问题。