2D阵列在视图中显示不正确

时间:2020-11-08 12:03:30

标签: java multidimensional-array

我需要显示一些矩阵进行查看(使用了Java fx)。我有包含矩阵的字符串。问题是,当我想显示它以查看时,相应的列不在正确的位置,例如

1 4 6
23 15 17
3 6 25

如您所见,由于数字的位数不同,因此无法正确显示...打印代码:

public static void printMatrix(double[][] matrix){
        for(int i = 0; i < matrix.length; i++)
        {
            for(int j = 0; j < matrix[i].length; j++)
            {
                String x = String.format("%5d ",(int) matrix[i][j]);
                Helper.matrixString += x;
            }
            Helper.matrixString += System.lineSeparator();
        }
    }

2 个答案:

答案 0 :(得分:1)

这应该可以工作(在数字前添加“”填充)

"% 5d" 

而不是(只是在数字后添加“”)

"%5d "

测试代码:

public static void main(String[] args) {
    double[][] matrix = {
            {1,4,6},
            {23,15,17},
            {3,5,25}
    };
    printMatrix(matrix);
}

public static void printMatrix(double[][] matrix) {
    for (int i = 0; i < matrix.length; i++) {
        String l = "";

        for (int j = 0; j < matrix[i].length; j++) {
            String x = String.format("%5d ", (int) matrix[i][j]);
            l += x;
        }
        System.out.println(l);
    }
}

输出是

    1     4     6 
   23    15    17 
    3     5    25 

来自http://grails.asia/convert-java-integer-to-fixed-length-string

答案 1 :(得分:0)

方法 String.format 使用 Formatter#syntax,其中 "%5d " - 表示格式化为五位数字,如有必要,前导空格和一个尾随空格。在这种情况下,"%2d" 就足够了:

int[][] matrix = {
        {1, 4, 6},
        {23, 15, 17},
        {3, 6, 25}};
Arrays.stream(matrix)
        .map(row -> Arrays.stream(row)
                // formatting as a two-digit number
                // with a leading space if necessary
                .mapToObj(i -> String.format("%2d", i))
                // an array of strings representing
                // numbers in specified format
                .toArray(String[]::new))
        // string representation of rows
        .map(Arrays::toString)
        // output rows in a column
        .forEach(System.out::println);

输出:

[ 1,  4,  6]
[23, 15, 17]
[ 3,  6, 25]

另见:
How do I rotate a matrix 90 degrees counterclockwise in java?
Formatting 2d array of stings