CodeGym /Java 博客 /China /Java 中的矩阵 - 二维数组
作者
Oleksandr Miadelets
Head of Developers Team at CodeGym

Java 中的矩阵 - 二维数组

已在 China 群组中发布

Java 中的矩阵/二维数组是什么?

“矩阵是排列成固定数量的行和列的数字的集合。” 通常,这些数组都是实数。一般来说,矩阵可以包含复数,但为了简单起见,我们将在这里只使用整数。让我们看看矩阵的样子。这是一个 4 行 4 列的矩阵示例。 Java 中矩阵 - 二维数组 - 2

图 1:简单的 4x4 矩阵

为了在 Java 中表示这个矩阵,可以使用二维数组。二维数组有 2 个维度,一个表示行,一个表示列。例如,如果你指定一个整数数组 int arr[4][4],那么这意味着矩阵将有 4 行和 4 列。或者,你可以说每行将有 4 列。矩阵中的总大小/单元格数将为行*列= mxn = 4x4 = 16。 Java 中矩阵 - 二维数组 - 3

图 2:图 1 中的矩阵[4][4] 在 Java 中表示为二维数组

声明和初始化二维数组

下面是一些不同的方法,要么只声明数组的大小,要么只初始化而不提及大小。

public class Matrices {

	public static void main(String[] args) {

		// declare & initialize 2D arrays for int and string
		int[][] matrix1 = new int[2][2];
		int matrix2[][] = new int[2][3];
           
           //the size of matrix3 will be 4x4
		int[][] matrix3 = { { 3, 2, 1, 7 }, 
					   { 9, 11, 5, 4 }, 
					   { 6, 0, 13, 17 }, 
					   { 7, 21, 14, 15 } };

		String[][] matrix4 = new String[2][2];

           //the size of matrix5 will be 2x3 
           // 3 cols because at max there are 3 columns
		String[][] matrix5 = { { "a", "lion", "meo" },  
				            { "jaguar", "hunt" } };
	}
}

二维数组遍历

我们都知道如何在 Java 中遍历常规数组。对于二维数组也不难。我们通常使用嵌套的“for”循环进行遍历。一些初学者可能不了解这个概念,但只要你深入研究,就可以通过一些练习来实现。看看下面的代码片段。为让你理解清楚,它只显示每行对应的列数。

public class MatrixTraversal {
	public static void main(String[] args) {

	    int[][] matrix = new int[4][4];
	    for (int i = 0; i < matrix.length; i++) 
	    {   
		 // length returns number of rows
		 System.out.print("row " + i + " : ");		
		 for (int j = 0; j < matrix[i].length; j++) 
		 { 
		    // here length returns # of columns corresponding to current row
		    System.out.print("col " + j + "  ");
		 }
	    System.out.println();
	   }
	}
}
输出
行 0 : 列 0 列 1 列 2 列 3 行 1 : 列 0 列 1 列 2 列 3 行 2 : 列 0 列 1 列 2 列 3 行 3 : 列 0 列 1 列 2 列 3
Java 中的矩阵 - 二维数组 - 3

如何在 Java 中输出二维数组?

在熟悉了二维数组遍历之后,我们再来看看在 Java 中输入二维数组的几种方式。

使用嵌套的“for”循环

这是在 Java 中输出矩阵的最基本方法。

public class MatrixTraversal {

    public static void printMatrix(int matrix[][])
    {
        for (int i = 0; i < matrix.length; i++) 
	  {   
	    // length returns number of rows		
	    for (int j = 0; j < matrix[i].length; j++) 
	    { 
	      // here length returns number of columns corresponding to current row
		// using tabs for equal spaces, looks better aligned
		// matrix[i][j] will return each element placed at row ‘i',column 'j'
		System.out.print( matrix[i][j]  + "\t"); 
	     }
	     System.out.println();
	   }
	}
	
	public static void main(String[] args) {

		int[][] matrix = { { 3, 2, 1, 7 }, 
					 { 9, 11, 5, 4 }, 
					 { 6, 0, 13, 17 }, 
					 { 7, 21, 14, 15 } };
		printMatrix(matrix);
	}
}
输出
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

使用“for-each”循环

这是 Java 中另一种使用“foreach 循环”输出二维数组的方法。这是 Java 提供的一种特殊类型的循环,其中 int[]row 将循环遍历矩阵中的每一行。然而,变量“element”将包含放在行中列下标处的每个元素。

public class MatrixTraversal {

	public static void printMatrix(int matrix[][]){
		for (int [] row : matrix) 
		{   
			// traverses through number of rows		
			for (int element : row) 
			{ 
				// 'element' has current element of row index
				System.out.print( element  + "\t"); 
			}
			System.out.println();
		}
	}
	
	public static void main(String[] args) {

		int[][] matrix = {  { 3, 2, 1, 7 }, 
					  { 9, 11, 5, 4 }, 
					  { 6, 0, 13, 17 }, 
					  { 7, 21, 14, 15 } };
		printMatrix(matrix);
	}
}
输出
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

使用“Arays.toString()”方法

在 Java 中,Arrays.toString() 方法会将传递给它的每个参数转换为单个数组,并使用内置的方法进行输出。我们创建了一个虚拟的 String 二维数组进行练习。同样的方法也适用于整数数组。我们鼓励实现此方法,作为练习之用。

import java.util.Arrays;
public class MatrixTraversal {
	public static void printMatrix(String matrix[][]){
	
		for (String[] row : matrix) {
			// convert each row to a String before printing
			System.out.println(Arrays.toString(row));
		}
	}
	
	public static void main(String[] args) {

		String [][] matrix = {  { "Hi, I am Karen" }, 
						{ "I'm new to Java"}, 
						{ "I love swimming" }, 
						{ "sometimes I play keyboard"} };
		printMatrix(matrix);
	}
}
输出
[你好,我是凯琳] [我是一名 Java 新手] [我喜欢游泳] [我有时会敲打键盘]

代码解释

在第一次迭代中,String[]row 将读取“你好,我是凯琳”作为一个数组,将其转换为 String,然后将其输出。这就是所有迭代的进行方式。对于此处提供的实用程序,你不必跟踪任何下标 (i, j) 或嵌套循环。

结论

Java 中的二维数组是最简单的多维数组。在本文结束时,我们希望你在使用时不要害怕,而是要卷起袖子加油干。在你方便时,可以运行所有这些示例代码或逐行调试。但最后,我们想提供的建议(像往常一样)是,技能是练习和耐心的产物。希望你在 Java 中使用二维数组时获得有趣的学习体验。祝你好运!
评论 (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
redpig 级别 7,上海,中国
23 十一月 2022
多维数组可以使用Arrays.deepToString()的方法来打印,不过这个方法是将所有数据放在一列。