2013-05-02 95 views
-1

我已经得到的数据结构如下:检查空进入无限循环

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

每个对象具有右指针到另一个。

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) {} 

但它没有为我工作。它根本没有尽可能地向右转。

+0

你是否检查过链接列表本身?你可能有一个循环链表。此外,你永远不应该抓到一个NPE。 – 2013-05-02 22:51:30

+0

当然不是循环的。我在这里没有使用链表。简单实现上面描述的对象中的数据结构。 – 2013-05-02 22:56:04

+0

您可能没有使用核心Java LinkedList类,但是您已经创建了自己的链接列表数据结构,并且在您说“它不是肯定的循环”之前,最好检查它。在你掌握了解决方案之前,不要忽视任何可能的问题原因。 – 2013-05-02 22:57:28

回答

0

你的循环是正常的,问题是其他地方,这工作正常

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(); 
    } 
1

你有你的链表结构的圆形链接。要调试它,可以使用调试器或者在while循环中打印对象来查看它们是什么。这样你会发现问题。确保你的对象有一个体面的toString()方法,并在循环内部打印出来,以确定你的循环连接。此外,您不必为此发生“最后一点”,但您需要的仅仅是在某处存在循环连接。你最好找到它。

+0

问题是我的结构中只有一个对象。当我尝试添加另一个时,它应该找到最正确的对象并添加指向新对象的指针。第一个对象被添加,但是另一个不是。它被卡在这个循环中。 toString方法也只在列表中显示一个对象。 – 2013-05-02 23:22:18

+0

@Lythium:考虑创建并发布一个[sscce](http://sscce.org),一个我们可以编译和运行的小程序,它使用代码的核心并重现您的问题。如果你尝试这种做法,你很可能会在问题孤立的时候看到问题。 – 2013-05-02 23:36:53