我有一个包含链表的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,则线条将移动,所有绘图都将被错过。有没有更好的方法来做我想要的?我认为这段代码很清楚,足以显示问题。如果没有,请告诉我做得更好。 谢谢。
答案 0 :(得分:1)
你可以使用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());
答案 1 :(得分:0)
似乎n个数字上方和下方的破折号等于4n + 1.因此,对于循环:
for(int i = 0; i < (4 * ll.size()) + 1; i++) System.out.print("-");
System.out.println();
// same as yours
for(;temp!=null;temp = temp.next)System.out.print("| "+temp.data.Value+" |");
System.out.println();
for(int i = 0; i < (4 * ll.size()) + 1; i++) System.out.print("-");
希望这可以解决问题
编辑:如果您的数据不是数字,那么您需要为每个数据填充一致的空间。然后你将计算每个方格的破折号数并得到它的公式。 祝你好运