【发布时间】:2023-02-26 19:26:16
【问题描述】:
我正在尝试在我的 DoublyLinkedList 类中实现 append 方法,但我遇到了一些与 toString 方法相关的错误
public class DoublyLinkedList {
private Node head;
private Node tail;
private int length;
static class Node {
int value;
Node prev;
Node next;
public Node(int value) {
this.value = value;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
", prev=" + prev +
", next=" + next +
'}';
}
}
public DoublyLinkedList(int value) {
this.head = new Node(value);
this.tail = this.head;
this.length = 1;
}
public void append(int value) {
Node newNode = new Node(value);
if (this.length == 0) {
this.head = newNode;
this.tail = newNode;
return;
}
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode;
this.length++;
}
@Override
public String toString() {
return "DoublyLinkedList{\n" +
"\thead=" + head +
",\n\ttail=" + tail +
",\n\tlength=" + length +
"\n}";
}
}
public class Main {
public static void main(String[] args) {
DoublyLinkedList doublyLinkedList = new DoublyLinkedList(1);
doublyLinkedList.append(2);
System.out.println(doublyLinkedList);
}
}
我的标准输出中收到大量此类错误消息
tech.othmane.doublylinkedlist.Main
Exception in thread "main" java.lang.StackOverflowError
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
at tech.othmane.doublylinkedlist.DoublyLinkedList$Node.toString(DoublyLinkedList.java:18)
at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453)
该问题与 Node 类中的 toString 方法有关。
@Override
public String toString() {
return "Node{" +
"value=" + value +
", prev=" + prev +
", next=" + next +
'}';
}
当我注释掉 prev 或 next 字段时,代码有效
【问题讨论】:
-
请edit您的问题以包含完整的堆栈跟踪。
-
您有两个版本的 toString 方法,它们甚至无法编译。那么是哪一个呢?此外,您的错误不是完整的堆栈跟踪,您错过了错误消息。请更新您的问题。
-
我已经更新了我的问题。这就是我得到的
-
Node不应该是static。 -
它也不应该嵌套在你的其他类中。
标签: java