之前我们介绍过一维数组来存储线性的元素集合,我们可以用二维数组存储矩阵或表格。
1.声明二维数组变量并创建二维数组
下面是声明二维数组的语法:数据类型[][]数组名;例如int[][] matrix;可以使用这个语法创建5*5的int型二维数组,并将它赋值给matrix;
int[][] matrix = new int[5][5];
二维数组中使用两个下标,一个表示行,一个表示列,同一维数组一样,每个下标检索都是int型的,从0开始。
注意:使用matrix[2,1]访问第二行第一列的元素是一种常见错误,在Java中,每个下标必须放在一对方括号中。
2.获取二维数组的长度
二维数组实际上是一个数组,它的每个元素都是一个一维数组,数组x的长度是数组中元素的个数,可以用x.length获取该值,二维数组可以看作一个一维数组,它的每个元素是另一个一维数组。
二维数组中的每一行就是一个数组,因此各行的长度就可以不同,这样的数组成为锯齿数组,如果事先不知道锯齿数组的值,但知道它的长度,可以使用如下声明:
int [][] triangleArray = new int[5][];
triangleArray[0] = new int[5];
triangleArray[1] = new int[4];
triangleArray[2] = new int[3];
triangleArray[3] = new int[2];
triangleArray[4] = new int[1];
使用语法new int[5][]创建数组时,必须指定第一个下标。语法new int[][]是错误的。
3.处理二维数组
(1)下面的循环,使用用户输入值初始化数组:
java.util.Scanner input = new Scanner(System.in);
System.out.println(\”Enter\”+matrix.length+\”rows and\”+matrix[0].length+\”columns:\”);
for(int row = 0;row<matrix.length;row++){
for(int column=0;column<matrix[row].length;column++)
matrix[row][column] = input.nextInt();
}
}
(2)使用0到99的随机值初始化数组
for(int row = 0;row<matrix.length;row++){
for(int column=0;column<matrix[row].length;column++)
matrix[row][column] = (int)(Math.random()*100);
(3)打乱二维数组中的所有元素,对每个元素matrix[i][j],随机产生下标i1和j1,然后互换两者。
for(int row = 0;row<matrix.length;row++){
for(int column=0;column<matrix[row].length;column++){
int i1 = (int)(Math.random()*matrix.length);
int j1 = (int)(Math.random()*matrix[row].length);
int temp = matrix[i][j];
matrix[i][j] = matrix[i1][j1];
matrix[i1][j1] = temp;
}
}
4.给方法传递二维数组
我们像传递一维数组一样,给方法传递二维数组,我们下面举一个例子,返回矩阵中所有元素的和,程序清单如下:
package passtwodimensionalaray;
import java.util.Scanner;
/**
*
* @author mjd
*/
public class PassTwoDimensionalAray {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner input = new Scanner(System.in);
int[][]m=new int[3][4];
System.out.println(\”Enter\”+m.length+\”rows and\”+m[0].length+\”columns:\”);
for(int i = 0;i<m.length;i++)
for(int j=0;j<m[i].length;j++)
m[i][j] = input.nextInt();
System.out.println(\”\\nSum of all elements is\”+sum(m));
}
public static int sum(int[][]m){
int total =0;
for(int row = 0;row<m.length;row++){
for(int column=0;column<m[row].length;column++){
total=total+m[row][column];
}
}
return total;
}
}
输入一个三行四列的二维数组,输出结果和,程序正确运行。