Java第七章——多维数组

一、二维数组的基础知识
二维数组中的元素通过行和列的下标来访问。
1.声明二维数组变量并创建二维数组
数据类型【】【】 数组名;
数据类型 数组名【】【】;//允许这种方式,但不推荐使用
2.获取二维数组的长度
二维数组实际上是一个一维数组,它的每个元素都是一个一维数组。数组x的长度是数组中元素的个数,可以用x.length获取该值。元素x[0],x[1],…,x[x.length-1]也是数组。可以使用x[0].length,x[1].length,…,x[x.length-1].length获取它们的长度。
3.锯齿数组
二维数组中的每一行本身就是一个数组,因此,各行的长度就可以不同。这样的数组称为锯齿数组(ragged array).
在这里插入图片描述
上图就是一个锯齿数组,如果不知道锯齿数组的值,但知道它的长度,可以试用一下语法:
int [][] triangleArray [0 ] = 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[ ][ ]是错误的。
二、处理二维数组
嵌套的for循环常用于处理二维数组。
假设如下创建数组matrix:
int [] [] matrix=new int[10][10];
下面是一些处理二维数组的例子:
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)(打印数组)为打印一个二维数组,必须使用如下所示的循环打印数组中的每个元素:

for(int row=0;row<matrix.length;row++){
        for(int column=0;column<matrix[row].length;column++){
        System.out.print(matrix[row][column]+" ");
        }
        System.out.println();
        }

4)(求所有元素的和)使用名为total的变量存储和。将total初始化为0.利用类似下面的循环,把数组中的每一个元素都加到total上:

int total=0;
for(int row=0;row<matrix.length;row++){
for(int column=0;column<matrix[row].length;column++){
total+=matrix[row][column];
}
}

5)(对数组按列求和)对于每一列,使用名为total的变量存储它的和。利用类似下面的循环,将该列中的每个元素加到total上:

for(int column=0;column<matrix[0].length;column++){
int total=0;
for(int row=0;row<matrix.length;row++)
total+=matrix[row][column];
System.out.println("Sum for column "+column +" is "+total);
}

6)(哪一行的和最大?)使用变量maxRow和indexOfMaxRow分别跟踪和的最大值以及该行的索引值。计算每一行的和,如果计算出的新行的和更大,就更新maxRow和indexOfMaxRow.

int maxRow=0;
int indexOfMaxRow=0;
//Get sum of the first row in maxRow
for(int column=0;column<matrix[0].length;column++){
maxRow+=matrix[0][column];
}
for(int row=1;row<matrix.length;column++){
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 maximum sum of "+maxRow);

7)(随意打乱)对每个元素matrix[i][j],随机产生下标i1和j1,然后互换matrix[i][j]和matrix[i1][j1],

for(int i=0;i<matrix.length;i++){
	for(int j=0;j<matrix[i].length;j++){
	
	int j1=(int)(Math.random()*matrix[i].length);
int temp=matrix[i][j];
matrix[i][j]=matrix[i1][j1];
matrix[i1][j1]=temp;
}
}

三、将二维数组传递给方法
将一个二维数组传递给方法的时候,数组的引用传递给了方法。
可以像传递一维数组一样,给方法传递二位数组。也可以从一个方法返回一个数组。
四、多维数组
二维数组由一个一维数组的数组组成,而一个三维数组可以认为是由一个二维数组的数组所组成。

猜你喜欢

转载自blog.csdn.net/yangyuCISCO/article/details/83747977
今日推荐