二维数组创建
定义数组
声明二维数组
Java中二维数组的声明格式:
数据类型名[ ][ ] 数组名; 或 数据类型名 数组名[ ][ ];
分配数组内存
常用格式:
new 数组名[ M][N ] ; //M,N为数组行号和列号
分配数组内存
1)规则二维数组:可以直接为每行元素分配空间。
double[][] b;
b=new double[2][3];
double a[][]=new double[2][3];
2)不规则二维数组:通常从首行开始,分别为每一行元素分配空间。
int a[ ][ ]=new int[3][];
a[0]= new int[2];
a[1]= new int[3];
a[2]= new int[4];
Student s[ ][ ] = new Student[2][ ];
s[0]= new Student [1];
s[1]= new Student [2];
s[0][0]= new Student();
数组元素引用
二维数组元素的引用格式为:
数组名[元素行下标] [元素列下标]
注意,对于一个M行N列的二维数组来说,其任何元素的行下标都只能在[0,M-1]的范围内取值,列下标只能在[0,N-1]范围内取值。
比如:
定义规则二维数组
int a[][]=new int[2][3];
则其元素的引用: a[0][0] //ok a[0][3] //error
a[0][2] //ok a[2][3] //error
数组初始化
二维数组初始化的时候,可以把每一行数据用一对{}括起,不同行数据间用逗号隔开。此时一个二维数组是否规则,完全依赖于其初始化数据的状况。
int intArray_1[ ][ ]={{1,2},{2,3},{3,4}};
//定义了一个3行2列的规则二维数组,共有6个元素
int intArray_2[ ][ ]={{1,2},{2,3},{3,4,5}}; //定义了一个3行的不规
则二维数组,第一行2个元素,第二行2个元素,第三行3个元素,共7个元素
二维数组遍历
对于二维数组的遍历,是指访问一个二维数组中的每一个元素。
由于二维数组的数据排列具有行列关系,所以二维数组的长度(即length属性)实质上是指其包含的行数,而每一行的长度实质上是指该行数据包含的列数,访问格式如下:
数组名.length
数组名[行下标].length
通过访问数组长度和行长度,可以方便的遍历一个二维数组。
利用二重for循环访问数组长度和行长度,可以方便的遍历一个二维数组:
int arr[][] = { { 1 }, { 2, 3 }, { 4, 5, 6 } };
for (int x = 0; x < arr.length; x++) {
for (int y = 0; y < arr[x].length; y++)
System.out.print(arr[x][y] + "、");
System.out.println("");
}
案例:
矩阵的转置,即将二维数组行列元素互换位置,形成一个新的二维数组存到另一个数组中
杨辉三角形
中国南宋数学家杨辉,在他所著的《详解九章算法》中提出了用于表示二项式展开后的系数构成的三角图形,称作“开方做法本源”,简称为“杨辉三角”。这比法国数学家帕斯卡发现的相同规律的“帕斯卡三角形”早300多年。杨辉三角形是中国数学史上的一个伟大成就。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[][] sc = new int[n][n];
for(int i=0;i<sc.length;i++) {
for(int j=0;j<=i;j++){
if(j==0||j==i) {
sc[i][j]=1;
}
else {
sc[i][j]=sc[i-1][j-1]+sc[i-1][j];
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<=i;j++) {
if(j==0) {
System.out.print(sc[i][j]);
}
else {
System.out.print(" "+sc[i][j]);
}
}
System.out.println();
}
scan.close();
}
}