我假设“看起来像一个矩阵”,您的意思是矩阵元素之间的等距间距。
这是我想出来的。
1 3 4
-124 52 6
1 2 3 4
5 6 7 8
-9 -8 -7 -6
2 3 4 5
7 8 9 10
-12 -11 -10 -9
“诀窍”是找到需要打印最多字符的元素,并使用该长度加一来获取行上单元格之间的间距。
String 类有一个format 方法,可以将int 格式化为String。格式化程序 "%4d" 将采用 int 并使其成为带有前导空格的四个字符 String。
我们可以通过将格式化程序的三个部分放在一起来构造一个格式化程序。
String formatter = "%" + width + "d";
这是完整的可运行代码。
public class MatrixPrint {
public static void main(String[] args) {
MatrixPrint mp = new MatrixPrint();
int[][] matrix1 = {{1, 3, 4},
{-124, 52, 6}};
System.out.println(mp.printMatrix(matrix1));
int[][] matrix2 = {{1, 2, 3, 4},
{5, 6, 7, 8},
{-9, -8, -7, -6}};
System.out.println(mp.printMatrix(matrix2));
int[][] matrix3 = {{2, 3, 4, 5},
{7, 8, 9, 10},
{-12, -11, -10, -9}};
System.out.println(mp.printMatrix(matrix3));
}
public String printMatrix(int[][] matrix) {
int width = largestWidth(matrix) + 1;
String formatter = "%" + width + "d";
return printMatrixElements(matrix, formatter);
}
private int largestWidth(int[][] matrix) {
int maxWidth = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
int width = Integer.toString(matrix[i][j]).length();
maxWidth = Math.max(maxWidth, width);
}
}
return maxWidth;
}
private String printMatrixElements(int[][] matrix, String formatter) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
builder.append(String.format(formatter, matrix[i][j]));
}
builder.append(System.lineSeparator());
}
return builder.toString();
}
}