有没有办法在稀疏矩阵中对齐这些值?
0 0 0 0 8 2
0 0 0 19 11 0
0 11 0 13 0 0
0 18 0 0 7 0
0 0 0 0 4 0
0 0 3 0 0 0
目前我有这个:
if (matrix[i][j] < 20)
System.out.print(matrix[i][j] + " ");
else
System.out.print(" " + 0 + " ");
我遇到的问题是,如果值在1到9之间,那么在值之前没有剩余空间,因此会弄乱我的对齐。我可以插入另一个if语句,但是想知道这是否更简单/更清晰?
任何帮助将不胜感激,谢谢
答案 0 :(得分:0)
我在处理la4j(线性代数for Java)时解决了类似的任务。 la4j使用overriden toString()
方法来满足这种需求。所以,我决定使用慢速(因为控制台输出在调试模式下使用primary,而la4j具有快速有效的发布版本流)但安全算法。这是代码(precision
是分隔符后的位数):
@Override
public String toString() {
final int precision = 3;
int formats[] = new int[columns];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
long value = (long) unsafe_get(i, j);
int size = Long.toString(value).length() + precision + 2;
formats[j] = size > formats[j] ? size : formats[j];
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
sb.append(String.format("%" + Integer.toString(formats[j])
+ "." + precision + "f", unsafe_get(i, j)));
}
sb.append("\n");
}
return sb.toString();
}
因此,算法有两个步骤:
formats
数组计算为需要的字符数
打印i
colomn aligned