我正在为处理矩阵的程序创建一个输出窗口。它应该打印出预先形成的命令以及矩阵的格式化版本。但我对齐问题。我知道String.format
有效,因为我有一个toString()
方法可以正常工作。
注意第二行和第三行的间距不正确。这是因为100.00已经完全填充了格式化的字符串,因为0.00需要额外的空格来填充字符串(参见toHtml())。我相信这与HTML的显示方式有关,但我不确定。我的猜测是零后面的空格没有正确显示或正在合并。
以下是涉及的方法。
public String toHtml(int dec)
{
String[] colors = {"#C0C0C0","#FFFFFF"};
String f = "%-"+(getLongestValue()+dec+1)+"."+dec+"f";
String res = "";
for(int r = 0;r<rows;r++)
{
for(int c = 0;c<columns;c++)
{
res += "<span style=\"background-color:"+colors[(r+c)%2]+";\">"+String.format(f, contents[r][c])+"</span>";
}
res += "<p>";
}
return res;
}
创建要显示的HTML文本。方法getLongestValue()返回数组'contents'中小数位前的任何数字的最大长度。
和
newOutput("New Matrix ["+name+"]<br>"+m.toHtml());
public void newOutput(String s)
{
JLabel l = new JLabel("<html>"+s+"<br></html>");
l.setFont(new Font("Monospaced",1,18));
jPanel1.add(l);
}
将标签添加到输出窗口
此外,这里是参考
的toString()方法public String toString()
{
String f = "%-"+(getLongestValue()+3)+".2f ";
String res = "";
for(int r = 0;r<rows;r++)
{
for(int c = 0;c<columns;c++)
{
res += String.format(f, contents[r][c]);
}
res += "\n";
}
return res;
}
通过toString()输出Matrix toString Output
更极端的版本
在这种情况下,程序应该发现最大值为-15或-20,并将格式长度的大小设置为6(长度为3,小数点为2,小数点为1)除了我提到的两个值之外,任何值都不符合格式。
这是前一个示例的toString()的输出 toString() output
答案 0 :(得分:1)
这解决了这个问题,空间没有被正确地表示为等宽
inline CLS operator+(const char *lhs, const CLS& rhs)
{
return CLS(lhs) + rhs;
}