我正在使用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) + " " + " " + " ";
我试图连接字符串,但它没有用。 任何有助于解决此错误的建议都会消失?
答案 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;
}