出于某种原因,我的 toString() 无法使用 StringBuilder 输入,而只能使用 System.out 调用。如果我没有 System.out.println() 调用,它将打印出空行。我以前使用过StringBuilder,以前没有发生过这种情况。我回顾了这些程序,它们的设置与我现在的方式类似。我假设它与 StringBuilder 内部的调用有关?
我仍在学习 Java,非常感谢您的帮助。这里列出的是我的程序代码:
class NodeUMUC<T> {
private T element;
private NodeUMUC<T> next;
private NodeUMUC<T> prev;
// Default Constructor
public NodeUMUC() {
next = null;
prev = null;
element = null;
}
//constructor
public NodeUMUC(T element, NodeUMUC<T> next, NodeUMUC<T> prev) {
this.element = element;
this.next = next;
this.prev = prev;
}
public void setElement(T element) {
this.element = element;
}
public T getElement() {
return element;
}
public void setNextNode(NodeUMUC<T> next) {
this.next = next;
}
public NodeUMUC<T> getNextNode() {
return next;
}
public void setPrevNode(NodeUMUC<T> prev) {
this.prev = prev;
}
public NodeUMUC<T> getPrevNode() {
return prev;
}
} // End NodeUMUC<T>
public class LinkedListUMUC<T> {
private NodeUMUC<T> head;
private NodeUMUC<T> tail;
private int size;
// Default Constructor
public LinkedListUMUC() {
size = 0;
}
// Return size of the linked list
public int size() {
return size;
}
// Check for items in linked list
public boolean isEmpty() {
return size == 0;
}
// Add element at begining
@SuppressWarnings("unchecked")
public void insertHead(T element) {
NodeUMUC<T> insert = new NodeUMUC<>(element, head, null);
if (head != null) {
head.setPrevNode(insert);
}
head = insert;
if (tail == null) {
tail = insert;
}
size++;
System.out.println("Adding at head: " + element);
}
// Add element at end
@SuppressWarnings("unchecked")
public void insertTail(T element) {
NodeUMUC<T> insert = new NodeUMUC<>(element, null, tail);
if (tail != null) {
tail.setNextNode(insert);
}
tail = insert;
if (head == null) {
head = insert;
}
size++;
System.out.println("Adding at tail: " + element);
}
@SuppressWarnings("unchecked")
public T removeElementAt(int position) {
return null;
}
// Remove element from end
@SuppressWarnings("unchecked")
public T removeTail() {
if (size == 0) {
System.out.println("Empty List");
}
NodeUMUC<T> reference = tail;
tail = tail.getPrevNode();
tail.setNextNode(null);
size--;
System.out.println("Removing from tail: " + reference.getElement());
return reference.getElement();
}
public T peekElementAt(int n) {
return null;
}
// Display the element at begining
public T peekHead() {
@SuppressWarnings("unchecked")
NodeUMUC<T> reference = head;
try {
System.out.println("Peeking head: " + reference.getElement());
} catch (NullPointerException x) {
System.out.println("Empty List");
}
return reference.getElement();
}
// Display the element at end
public T peekTail() {
@SuppressWarnings("unchecked")
NodeUMUC<T> reference = tail;
try {
System.out.println("Peeking tail: " + reference.getElement());
} catch (NullPointerException x) {
System.out.println("Empty List");
}
return reference.getElement();
}
// Display all items in the linked list
@Override
public String toString() {
NodeUMUC<T> print = head;
StringBuilder sb = new StringBuilder();
//System.out.print("Items in List: ");
while (print != null) {
sb.append(print.getElement());
// sb.append(print.getElement());
System.out.print(print.getElement() + " ");
print = print.getNextNode();
}
System.out.println();
return sb.toString();
}
public static void main(String a[]) {
//create object
LinkedListUMUC<Integer> list = new LinkedListUMUC<>();
//call methods for manipulation
System.out.println("List Empty: " + list.isEmpty());
list.insertHead(14);
list.insertHead(25);
list.insertHead(67);
list.insertHead(98);
list.peekTail();
list.peekHead();
list.toString();
list.insertTail(2);
list.toString();
System.out.println("Size of List: " + list.size());
list.removeTail();
list.toString();
System.out.println("Size of List: " + list.size());
System.out.println("List Empty: " + list.isEmpty());
} // End Main
} // End LinkedListUMUC<T>
最佳答案
这不符合你的逻辑;没关系。只是 list.toString()
在 main
方法中没有执行任何操作:您忘记了打印返回的值。
顺便说一句,如果 toString
在相邻元素之间插入逗号会更清楚。
关于java - ToString StringBuilder 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597348/