您的位置:首页 > 编程语言 > Java开发

Java基础之(十二)二维数组

2016-07-30 19:14 363 查看
说明

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: