链接列表中的java.lang.StackOverflowError?

时间:2015-10-09 23:27:19

标签: java recursion

我正在使用BlueJay作为我的IDE。 我的目标是创建一个方法,从头开始在一行中打印列表中的每个值,用三个空格分隔。

到目前为止,我在BlueJ中没有产生语法错误:

public String toString(E val) {
         Node<E> node = head;
        Node<E> newNode= new Node<E>(val);
         String str = " ";
         if (!isEmpty()) {
         newNode.next = head;
         head= newNode;
        while ((head!= null)){
            str += toString(head.val);
            str += toString(head.val) + " " + " " + "  ";
           newNode = newNode.next;

        }
        return str;

        }

然而,当我尝试使用“inspect”在Blue J中测试我的代码并且输入一个字符串时,在改变它之后。我只是得到“空格”而不是我用三个空格输入的字符串。 我觉得它与

有关
 my str = toString(head.val);
            str += toString(head.val) + " " + " " + "  ";

我试图连接字符串,但它没有用。 任何有助于解决此错误的建议都会消失?

2 个答案:

答案 0 :(得分:0)

正如评论中的人所说,你永远不会在你的while循环中改变head。看看你的情况:head!= null。假设这最初是真的(所以循环开始运行),除非你在循环中改变head,它的状态永远不会改变,所以循环条件的结果不会改变,因此你的循环永远不会终止。这个无限循环包含对函数的递归调用,因此你的堆栈溢出异常。

尝试将newNode = newNode.next更改为head = head.next,以便您实际更新head的值。或者您可以尝试将循环条件更改为newNode != null

答案 1 :(得分:0)

在while循环中更改条件

newNode = head;
    while (newNode != null) {
        ....
        newNode = newNode.next;  
    }