我需要显示一些矩阵进行查看(使用了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();
}
}
答案 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