以矩阵格式打印出二维数组
Posted
技术标签:
【中文标题】以矩阵格式打印出二维数组【英文标题】:Printing out a 2D array in matrix format 【发布时间】:2011-07-01 00:29:19 【问题描述】:如何以矩阵框格式打印出一个简单的int[][]
,就像我们在其中手写矩阵的格式一样。简单的循环运行显然不起作用。如果有帮助,我正在尝试在 linux ssh 终端中编译此代码。
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
System.out.println(matrix[i][j] + " ");
System.out.println();
【问题讨论】:
【参考方案1】:final int[][] matrix =
1, 2, 3 ,
4, 5, 6 ,
7, 8, 9
;
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[i].length; j++)
System.out.print(matrix[i][j] + " ");
System.out.println();
生产:
1 2 3
4 5 6
7 8 9
【讨论】:
【参考方案2】:要正确格式化列中的数字,最好使用 printf。根据最大或最小数字的大小,您可能需要调整模式"%4d"
。例如,要允许Integer.MIN_VALUE
和Integer.MAX_VALUE
之间的任何整数,请使用"%12d"
。
public void printMatrix(int[][] matrix)
for (int row = 0; row < matrix.length; row++)
for (int col = 0; col < matrix[row].length; col++)
System.out.printf("%4d", matrix[row][col]);
System.out.println();
示例输出:
36 913 888 908
732 626 61 237
5 8 50 265
192 232 129 307
【讨论】:
【参考方案3】:int[][] matrix =
1, 2, 3,
4, 5, 6,
7, 8, 9,
10, 11, 12
;
printMatrix(matrix);
public void printMatrix(int[][] m)
try
int rows = m.length;
int columns = m[0].length;
String str = "|\t";
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
str += m[i][j] + "\t";
System.out.println(str + "|");
str = "|\t";
catch (Exception e)
System.out.println("Matrix is empty!!");
输出:
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
| 10 11 12 |
【讨论】:
【参考方案4】:在 Java 8 中:
import java.util.Arrays;
public class MatrixPrinter
public static void main(String[] args)
final int[][] matrix = new int[4][4];
printMatrix(matrix);
public static void printMatrix(int[][] matrix)
Arrays.stream(matrix).forEach((row) ->
System.out.print("[");
Arrays.stream(row).forEach((el) -> System.out.print(" " + el + " "));
System.out.println("]");
);
这会产生:
[ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
既然我们在这里,为什么不让行布局可定制呢?
我们只需要传递一个lamba到matrixPrinter
方法:
import java.util.Arrays;
import java.util.function.Consumer;
public class MatrixPrinter
public static void main(String[] args)
final int[][] matrix = new int[3][3];
Consumer<int[]> noDelimiter = (row) ->
Arrays.stream(row).forEach((el) -> System.out.print(" " + el + " "));
System.out.println();
;
Consumer<int[]> pipeDelimiter = (row) ->
Arrays.stream(row).forEach((el) -> System.out.print("| " + el + " "));
System.out.println("|");
;
Consumer<int[]> likeAList = (row) ->
System.out.print("[");
Arrays.stream(row).forEach((el) -> System.out.print(" " + el + " "));
System.out.println("]");
;
printMatrix(matrix, noDelimiter);
System.out.println();
printMatrix(matrix, pipeDelimiter);
System.out.println();
printMatrix(matrix, likeAList);
public static void printMatrix(int[][] matrix, Consumer<int[]> rowPrinter)
Arrays.stream(matrix).forEach((row) -> rowPrinter.accept(row));
这是结果:
0 0 0
0 0 0
0 0 0
| 0 | 0 | 0 |
| 0 | 0 | 0 |
| 0 | 0 | 0 |
[ 0 0 0 ]
[ 0 0 0 ]
[ 0 0 0 ]
【讨论】:
【参考方案5】:int[][] matrix =
1, 2, 3,
4, 5, 6,
7, 8, 9
;
//use foreach loop as below to avoid IndexOutOfBoundException
//need to check matrix != null if implements as a method
//for each row in the matrix
for (int[] row : matrix)
//for each number in the row
for (int j : row)
System.out.print(j + " ");
System.out.println("");
【讨论】:
【参考方案6】:public static void printMatrix(double[][] matrix)
for (double[] row : matrix)
for (double element : row)
System.out.printf("%5.1f", element);
System.out.println();
函数调用
printMatrix(new double[][]2,0,0,0,2,0,0,0,3);
输出
2.0 0.0 0.0
0.0 2.0 0.0
0.0 0.0 3.0
在控制台中
【讨论】:
【参考方案7】:自Java 8:
int[][] matrix = 1, 2, 3, 4, 5, 6, 7, 8, 9;
Arrays.stream(matrix).map(Arrays::toString).forEach(System.out::println);
输出:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
【讨论】:
【参考方案8】:这是我使用StringBuilder
数组显示二维整数数组的有效方法。
public static void printMatrix(int[][] arr)
if (null == arr || arr.length == 0)
// empty or null matrix
return;
int idx = -1;
StringBuilder[] sbArr = new StringBuilder[arr.length];
for (int[] row : arr)
sbArr[++idx] = new StringBuilder("(\t");
for (int elem : row)
sbArr[idx].append(elem + "\t");
sbArr[idx].append(")");
for (int i = 0; i < sbArr.length; i++)
System.out.println(sbArr[i]);
System.out.println("\nDONE\n");
输出:
( 1 2 3 )
( 4 5 6 )
( 7 8 9 )
( 10 11 12 )
DONE
【讨论】:
【参考方案9】:public class Matrix
public static void main(String[] args)
double Matrix[][] =
0*1, 0*2, 0*3, 0*4,
0*1, 1*1, 2*1, 3*1,
0*2, 1*2, 2*2, 3*2,
0*3, 1*3, 2*3, 3*3;
int i, j;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
System.out.print(Matrix[i][j] + " ");
System.out.println();
输出:
0.0 0.0 0.0 0.0
0.0 1.0 2.0 3.0
0.0 2.0 4.0 6.0
0.0 3.0 6.0 9.0
【讨论】:
【参考方案10】:我更喜欢在 Java 中使用增强循环
因为我们的ar
是一个数组数组 [2D]。所以,当你迭代它时,你会首先得到一个数组,然后你可以迭代那个 array
来得到单个元素。
public static void main(String[] args)
int[][] ar =
12, 33, 23,
34, 56, 75,
14, 76, 89,
45, 87, 20;
for (int[] num : ar)
for (int ele : num)
System.out.print(" " + ele);
System.out.println(" ");
输出:
12 33 23
34 56 75
14 76 89
45 87 20
【讨论】:
以上是关于以矩阵格式打印出二维数组的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )