检查空进入无限循环
我已经得到的数据结构如下:检查空进入无限循环
[对象] - > [对象] - > [对象]
每个对象具有右指针到另一个。
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()
方法,并在循环内部打印出来,以确定你的循环连接。此外,您不必为此发生“最后一点”,但您需要的仅仅是在某处存在循环连接。你最好找到它。
问题是我的结构中只有一个对象。当我尝试添加另一个时,它应该找到最正确的对象并添加指向新对象的指针。第一个对象被添加,但是另一个不是。它被卡在这个循环中。 toString方法也只在列表中显示一个对象。 – 2013-05-02 23:22:18
@Lythium:考虑创建并发布一个[sscce](http://sscce.org),一个我们可以编译和运行的小程序,它使用代码的核心并重现您的问题。如果你尝试这种做法,你很可能会在问题孤立的时候看到问题。 – 2013-05-02 23:36:53
你是否检查过链接列表本身?你可能有一个循环链表。此外,你永远不应该抓到一个NPE。 – 2013-05-02 22:51:30
当然不是循环的。我在这里没有使用链表。简单实现上面描述的对象中的数据结构。 – 2013-05-02 22:56:04
您可能没有使用核心Java LinkedList类,但是您已经创建了自己的链接列表数据结构,并且在您说“它不是肯定的循环”之前,最好检查它。在你掌握了解决方案之前,不要忽视任何可能的问题原因。 – 2013-05-02 22:57:28