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();
}

したがって、アルゴリズムには 2 つのステップがあります。

  1. 列を揃えformatsて印刷する必要がある文字数として配列を計算しますi
  2. マトリックスを印刷する
于 2013-03-12T04:06:33.930 に答える