我有一个具有链接列表的Java程序。我想在命令行中绘制正方形并将链接列表的值放在其中。输出应如下所示:

-----------------
| 5 | 7 | 8 | 9 |
-----------------


这些数字只是要显示的示例。这是我到目前为止所做的:

public void display()
    {
        Node<data> temp = ll.getHead();//ll is linked list
        for(int i=0;i<ll.size();i++)System.out.print("---------");
        System.out.println();
        for(int i=0;i<ll.size();i++)System.out.print("|       |");
        System.out.println();
        for(;temp!=null;temp = temp.next)System.out.print("|   "+temp.data.Value+"  |");
        System.out.println();
        for(int i=0;i<ll.size();i++)System.out.print("|       |");
        System.out.println();
        for(int i=0;ll.size();i++)System.out.print("---------");
        System.out.println();
 }


此代码有两个问题:根本没有效率,并且如果该值大于9,则线条将移动并且所有图形都将丢失。有更好的方法来做我想要的吗?我认为这段代码很清楚,足以显示问题。如果没有,请告诉我做得更好。
谢谢。

最佳答案

您可以将StringBuilder用于上下两行,因为它们是相同的。
您可以在同一循环中构建所有行,以便可以处理值的可变长度:

StringBuilder line = new StringBuilder();
StringBuilder values = new StringBuilder();

for(;temp!=null;temp = temp.next) {

  String value =Integer.toString(temp.data.Value);

  line.append("-");
  values.append("|");

  for(int i=0; i<value.length(); i++) { line.append("-"); }
  values.append(value);
}

line.append("-");
values.append("|");

System.out.println(line.toString());
System.out.println(values.toString());
System.out.println(line.toString());

10-07 12:10