0

有没有办法在我的稀疏矩阵中对齐这些值?

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 语句,但想知道是否有更简单/更清洁的方法来做到这一点?

任何帮助将不胜感激,谢谢

4

1 回答 1

0

我在处理la4j(Java 的线性代数)时正在解决类似的任务。la4j 使用覆盖toString()方法来满足此需求。因此,我决定使用慢速(因为控制台输出在调试模式下使用主输出,并且 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();
}

所以,算法有两个步骤:

  1. 将数组计算formats为需要打印i列对齐的字符数
  2. 打印矩阵
于 2013-03-12T04:06:33.930 回答