以矩阵格式打印出二维数组

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_VALUEInteger.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 

【讨论】:

以上是关于以矩阵格式打印出二维数组的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-顺时针打印矩阵-二维数组

c语言查找二维数组的鞍点 新生求助大佬

C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

如何交换二维数组中的行或列?

二维数组找鞍点

打印出二维字符串数组的函数[重复]