InvocationException是否发生了调用方法?

时间:2014-05-01 21:03:38

标签: java

这是我正确的BST轮换的方法:

/**
 * Performs right rotation on a node 
 * Reset tags redoPreorder, redoInorder, redoPostorder 
 * 
 * @param n
 */
public void rightRotate(Node<E> n)
{
    Node<E> left = n.getLeft();
    Node<E> parent = n.getParent();
    left.setParent(parent);
    parent.setLeft(left);
    n.setParent(left);
    if(left.getRight() != null){
        Node<E> right = left.getRight();
        n.setLeft(right);
        //n.setLeft(right);
        right.setParent(n);
        left.setRight(n);
    }
    else{
        left.setRight(n);
    }
    redoInorder = true;
    redoPostorder = true;
    redoPreorder = true;
}

这是我的节点toString()

/**
 * Write the value of the instance variable named data.
 */
public String toString()
{
    String str = data + "";
    return str;
}

(在下面的树中,&#39; n&#39;是4) 所以我要翻过一棵树:

+7
 +4
  +3
   -2
   -
  -6
 +11
  -9
  +18
   +14
    -12
    -17
   +19
    -
    +22
     -20
     -

注意:+表示节点有子节点, - 表示它是一个叶子。对于 +7  -4  -8 7是树/子树的根,4是左子,8是右子(这不是我的例子,只是为了让你知道这种符号是如何工作的)。

所以我的问题......当我点击

 else{ left.setRight(n); }

在我的旋转方法中,eclipse给了我 com.sun.jdi.InvocationException发生了调用方法。

我不明白为什么。我的节点设置器的所有其他实例都运行正常,而且这个错误没有给出任何导致问题的提示,所以我看到有人比我更有经验可能会找到一些东西。我只是不明白为什么会导致问题。

感谢您的帮助。

如果有帮助,这里是正确的旋转测试的失败追踪:

java.lang.StackOverflowError
    at java.lang.Integer.toString(Unknown Source)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:363)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:359)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:359)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:366)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:359)
    at edu.iastate.cs228.hw5.BST.recursiveInorderTraversal(BST.java:366)

** recursiveInorderTraversals会持续一段时间......但是你得到了要点大声笑。

我在想toString()有什么问题?如果它被卡在这样的循环中是没有意义的,在我添加了else {}语句之前它没有用,但我需要它,因为它没有正确旋转。 / p>

1 个答案:

答案 0 :(得分:1)

您没有共享所有代码,所以我会猜测。如果您的节点将数据设置为null,那么您的toString()方法将失败。我相信你的IDE会抛出异常,因为它试图调用toString()来显示调试器中的对象。