说明
Java中数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用。
回到前面定义数组类型的语法:
type[] arrayName,这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,则可以把type定义成int[],那么上面的语法就变成int[][] arrayName。
声明二维数组变量
下面是声明二维数组的语法:
type[][] arrayName;
二维数组的初始化
1.静态初始化
int[][] intArray = {{1,2},{2,3},{3,4,5}};
2.动态初始化
1) 直接为每一维分配空间,格式如下:
//创建一个4行3列的二维数组
int[][] matrix = new int[4][3];
二维数组中使用两个下标,一个表示行,一个表示列。同一维数组一样,每个下标都是int型的,从0开始。如图所示,要将7赋值给第二行第一列的特定元素,可以使用下面的语句:
matrix[2][1] = 7;
2)二维简单数据类型数组的动态初始化如下:
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
获取二维数组的长度
二维数组实际上是一个数组,它的每个元素实际上都是一个一维数组。数组x的长度是数组中元素的个数,可以用x.length获取该值,元素x[0],x[1],…,x[x.length-1]也是数组,可以使用x[0].length,x[1].length,… ,x[x.lenth-1]来获取它们的长度。
例如,假设x = new int[4][3]。如下图所示:
锯齿数组
二维数组中的每一行本身就是一个数组,因此,各行的长度就可以不同。这样的数组称为锯齿数组。下面就是一个创建锯齿数组的例子:
int[][] triangleArray = {
{1,2,3,4,5}
{2,3,4,5}
{3,4,5}
{4,5}
{5}
};
可以知道,triangleArray[0].length的值是5;triangleArray[1].length的值是4;triangleArray[2].length的值是3;triangleArray[3].length的值是2;triangleArray[4].length的值是1;
处理二维数组
假设如下创建数组:
int[][] matrix = new int[10][10];
下面是一些处理二维数组的例子:
1) 使用输入值初始化数组:
int[][] matrix = new int[3][4];
Scanner input = new Scanner(System.in);
System.out.println("Enter "+ matrix.length+" row 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) 使用随机值初始化数组:
System.out.println("Enter "+ matrix.length+" row 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] = (int)(Math.random()*100);
}
}
3) 打印数组:
for(int row = 0;row < matrix.length;row++){
for(int column = 0;column < matrix[row].length;column++){
System.out.println(" "+matrix[row][column]);
}
System.out.println();
}
4) 求所有元素的和:
int sum = 0;
System.out.println("Enter "+ matrix.length+" row 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] = (int)(Math.random()*10);
sum += matrix[row][column];
}
}
5) 对数组按列求和:
for(int column = 0;column < matrix[0].length;column++){
int total = 0;
for(int row = 0;row < matrix.length;row++){
matrix[row][column] = (int)(Math.random()*10);
total += matrix[row][column];
}
System.out.println("Sum of column "+ column + " is " + total);
}
6) 计算哪一行的和最大?
int maxRow = 0;
int indexOfMaxRow = 0;
for(int column = 0;column < matrix[0].length;column++){
maxRow += matrix[0][column];
}
for(int row = 1;row < matrix.length;row++){
int totalOfThisRow = 0;
for(int column = 0;column < matrix[row].length;column++){
totalOfThisRow += matrix[row][column];
if(totalOfThisRow > maxRow){
maxRow = totalOfThisRow;
indexOfMaxRow = row;
}
}
}
System.out.println("Row "+ indexOfMaxRow+" has the max sum is: "+ maxRow);
7) 打乱数组(每个元素都打乱)
for(int i = 0;i < matrix.length;i++){
for(int j = 0;j < matrix[i].length;j++){
int i1 = (int)(Math.random()*matrix.length);
int j1 = (int)(Math.random()*matrix[i].length);
int temp = matrix[i][j];
matrix[i][j] = matrix[i1][j1];
matrix[i1][j1] = temp;
}
}
8) 打乱数组(打乱二维数组中的一维数组)
private static void shuffle(int[][] array) {
// TODO Auto-generated method stub
for(int i = 0;i < array.length;i++){
int row = (int)(Math.random()*array.length);
int[] temp = array[i];
array[i] = array[row];
array[row] = temp;
}
}
给方法传递二维数组
可以向传递一维数组一样,给方法传递二维数组。下列程序给出一个返回二维数组中所有元素之和的方法:
public class Exercise7_2 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[][] m = new int[4][3];
System.out.print("Enter "+ m.length + " row "+ m[0].length
+ " column : ");
for(int row = 0;row < m.length;row++){
for(int column = 0;column < m[0].length;column++){
m[row][column] = input.nextInt();
}
}
System.out.println("\nSum of all elements is "+sum(m));
}
private static int sum(int[][] m) {
// TODO Auto-generated method stub
int total = 0;
for(int i = 0;i < m.length;i++){
for(int j = 0;j < m[0].length;j++){
total += m[i][j];
}
}
return total;
}
}
输出结果:
Enter 4 row 3 column :
1 2 3
4 5 6
7 8 9
1 2 3
Sum of all elements is 51