数组的元素也可以是数组,每个数组的一个元素都是由一个一维数组构成,被称为二维数组。同样,多维数组可以看作是数组的数组,即N维数组的每一个元素就是一个N-1维数组。如:三维数组中的每一个元素都是一个二维数组。多维数组的定义即初始化与二维数组的基本类似,因此本节主要讲述二维数组。1、二维数组的声明二维数组声明的一般格式如下:数据类型数组名[][];或者格式如下:数据类型[][]数组名;其中数据类型与一维数组的相同,它既可以是基本数据类型,也可以是复合数据类型,数组名可以是任意合法的变量名。下面是数组声明举例。charch[][];double[][]d;String[][]str;与一维数组的声明相同,二维数组也不需要规定其中任意一维的长度,下面的声明都是不合法的。charch[4][];double[][5]d;String[6][7]str;2、二维数组的初始化二维数组的初始化也分为直接初始化和动态初始化两种方式。直接初始化必须在声明时开始,如下··124面的例子所示。intarray[][]={{1,2},{2,4},{4,8}};二维数组的动态初始化又可分为两种方式:一种是直接规定每一维的长度,并分配所需的内存空间,另一种是从高维开始,分别为每一维规定长度并分配内存空间。直接为每一维分配内存的格式如下:变量名=new数据类型[二维长度][一维长度];其中二维长度和一维长度都是大于0的整数,如下所示。intarray[][];array=newint[3][5];array是一个二维数组,二维长度为3,array[0]、array[1]、array[2]都是一维数组,长度都是5。分别分配内存格式如下:变量名=new数据类型[二维长度][];变量名[0]=new数据类型[一维长度0];变量名[1]=new数据类型[一维长度1];变量名[2]=new数据类型[一维长度2];...变量名[二维长度-1]=new数据类型[一维长度n];下面是一个二维数组初始化的实例。Intarray[][];//声明int类型二维数组arrayA=newint[3][];//为二维分配内存空间A[0]=newint[5];//为A[0]的一维分配内存空间A[1]=newint[5];//为A[1]的一维分配内存空间A[2]=newint[5];//为A[2]的一维分配内存空间注意:Java语言不要求多维数组中的每一维长度相同,即上面格式中一维长度0、一维长度1….一维长度n的值可能不同,这点与C/C++是不同的。3、二维数组的空间模型多维数组中高维的每一个元素都是一个低维数组。事实上,数组本身也是一个对象,它也是通过地址引用控制的。在高维元素中,每一个元素上保存的是一个低维数组的地址。4、二维数组的使用多维数组比一维数组更有用,尤其是二维数组在矩阵运算中使用非常广泛。矩阵运算包括矩阵的加法、减法、乘法、除法、转置等。这些矩阵运算都可以使用二维数组表示和运算。本节将给出如下矩阵,通过程序实现矩阵的转置。314556714789903256789024转置后变成如下矩阵:314756458978569090713224实现上面二维数组转置程序如下:01//程序6.5MatricesInverted.java二维数组的应用02importjava.util.Scanner;03publicclassMatricesInverted04{05publicstaticvoidmain(Stringargs[])06{07intmatricesa[][]={{31,45,56,71},{47,89,90,32},{56,78,90,24}};//声明并初始化整型二维变量08System.out.println(转置前的矩阵如下:);//输出字符串09for(inti=0;imatricesa.length;i++)//for循环遍历二维数组的二维10{11for(intj=0;jmatricesa.length;j++)//for循环遍历二维数组的一维12{13System.out.print(matricesa[j]+);//输出元素matricesa[j]14}15System.out.println();//输出换行符16}17//声明并创建matricesb二维数组18intmatricesb[][]=newint[matricesa[0].length][matricesa.length];19//实现矩阵转置20for(inti=0;imatricesa.length;i++)//for循环遍历二维数组二维21{22for(intj=0;jmatricesa.length;j++)//for循环遍历二维数组一维2324{25matricesb[j]=matricesa[j];//元素赋值26}27}28System.out.println(转置后的矩阵如下:);29//输出转置后的矩阵30for(inti=0;imatricesb.length;i++)//for循环遍历二维数组二维31{32for(intj=0;jmatricesb.length;j++)//for循环遍历二维数组一维33{34System.out.print(matricesb[j]+);//输出元素matricesb[j]35}36System.out.println();//输出换行符37}38}39}声明二维数组变量matricesa是直接初始化的,并输出转置前矩阵(第7~16行)。在进行二维数组的访问中,一般采用嵌套for循环完成,并且外层for循环的是高层维度,内层循环完成低维遍历,采用matricesb[j]=matricesa[j]将实现矩阵的转置(第18~27行)。输出转置后的矩阵(第30~37行)。