java数组之二维数组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组的元素也可以是数组,每个数组的一个元素都是由一个一维数组构成,被称为二维数组。同样,多维数组可以看作是数组的数组,即N维数组的每一个元素就是一个N-1维数组。如:三维数组中的每一个元素都是一个二维数组。多维数组的定义即初始化与二维数组的基本类似,因此本节主要讲述二维数组。
1 、二维数组的声明
二维数组声明的一般格式如下:
数据类型数组名[][];
或者格式如下:
数据类型[][] 数组名;
其中数据类型与一维数组的相同,它既可以是基本数据类型,也可以是复合数据类型,数组名可以是任意合法的变量名。下面是数组声明举例。
char ch[][];
double[][] d;
String[][] str;
与一维数组的声明相同,二维数组也不需要规定其中任意一维的长度,下面的声明都是不合法的。
char ch[4][];
double[][5] d;
String[6][7] str;
2、二维数组的初始化
二维数组的初始化也分为直接初始化和动态初始化两种方式。直接初始化必须在声明时开始,如下 ··124面的例子所示。
int array[][] = {{1,2},{2,4},{4,8}};
二维数组的动态初始化又可分为两种方式:一种是直接规定每一维的长度,并分配所需的内存空间,另一种是从高维开始,分别为每一维规定长度并分配内存空间。
直接为每一维分配内存的格式如下:
变量名= new 数据类型[二维长度][一维长度];
其中二维长度和一维长度都是大于0的整数,如下所示。
int array[][];
array = new int[3][5];
array是一个二维数组,二维长度为3,array[0]、array[1]、array[2]都是一维数组,长度都是5。分别分配内存格式如下:
变量名= new 数据类型[二维长度][];
变量名[0] = new 数据类型[一维长度0];
变量名[1] = new 数据类型[一维长度1];
变量名[2] = new 数据类型[一维长度2];
...
变量名[二维长度-1] = new 数据类型[一维长度n];
下面是一个二维数组初始化的实例。
Int array[][]; //声明int类型二维数组array
A = new int[3][]; //为二维分配内存空间
A[0] = new int[5]; //为A[0]的一维分配内存空间
A[1] = new int[5]; //为A[1]的一维分配内存空间
A[2] = new int[5]; //为A[2]的一维分配内存空间
3、二维数组的空间模型
多维数组中高维的每一个元素都是一个低维数组。事实上,数组本身也是一个对象,它也是通过地址引用控制的。在高维元素中,每一个元素上保存的是一个低维数组的地址。
4 、二维数组的使用
多维数组比一维数组更有用,尤其是二维数组在矩阵运算中使用非常广泛。矩阵运算包括矩阵的加法、减法、乘法、除法、转置等。这些矩阵运算都可以使用二维数组表示和运算。本节将给出如下矩阵,通过程序实现矩阵的转置。
31 45 56 71
47 89 90 32
56 78 90 24
转置后变成如下矩阵:
31 47 56
45 89 78
56 90 90
71 32 24
实现上面二维数组转置程序如下:
02 import java.util.Scanner;
03 public class MatricesInverted
04 {
05 public static void main(String args[])
06 {
07 int matricesa[][] = {{31,45,56,71},{47,89,90,32},{56,78,90,24}}; //声明并初始化整型二维变量
08 System.out.println("转置前的矩阵如下:"); //输出字符串
09 for (int i =0; i < matricesa.length; i++) //for循环遍历二维数组的二维
10 {
11 for(int j = 0; j < matricesa.length; j++) //for循环遍历二维数组的一维
12 {
13 System.out.print(matricesa[j]+" "); //输出元素matricesa[j]
14 }
15 System.out.println(); //输出换行符
16 }
17 //声明并创建matricesb二维数组
18 int matricesb[][] = new int[matricesa[0].length][matricesa.length];
19 //实现矩阵转置
20 for (int i =0; i < matricesa.length; i++) //for循环遍历二维数组二维
21 {
22 for(int j = 0; j < matricesa.length; j++) //for循环遍历二维数组一维
23
24 {
25 matricesb[j] = matricesa[j]; //元素赋值
26 }
27 }
28 System.out.println("转置后的矩阵如下:");
29 //输出转置后的矩阵
30 for (int i =0; i < matricesb.length; i++) //for循环遍历二维数组二维