天天看点

JAVA数组维数_跟我学java编程—理解数组结构的维数

前面介绍的数组结构都是多行单列数据结构,行数为数组的长度,列为数组中的元素。如上节图9-2所示的Rate数组有四行一列,因此其数组长度为4,列元素分别为1.5、3.2、0.09、36.5。结构如下图所示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

图 9-3 一维数组数据结构

多行单列的数组结构也可以用表格来表示,上图的数组结构就可以用4行1列的表格来表示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

类似于图9-3的数据结构,我们称之为一维数组,一维数组中只有一列数据,数据可以通过下标获取,下标为0的是1.5,下标为1的是3.2,下标为2的是0.09,下标为3的是36.5。

在用程序解决实际问题中,经常会遇到类似下面问题。例如,有50名学员,现在需要存储每名学员的序号和两门课程的成绩。数据结构可用如下表格所示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

表格结构为50行3列结构,要存储类似上面表格结构的数据,用前面介绍的一维数组不能满足存储要求。因为一维数组只能存储1列数据,现在有3列数据。用什么数据结构存储上述表格的数据呢?试想一下,如果一维数组的每个元素本身也是一维数组,就可以存储上述表格数据,数据结构如下图所示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

图 9-4 二维数组数据结构

上图所示的数据结构中,Students为数组的名称,数组的长度为50,其数组元素本身也是一个长度为3的数组,该数组有三个元素,分别对应学员序号、语文成绩、数学成绩,其中下标0对应学员序号,下标1对应语文成绩,下标2对应数学成绩。这样就可以根据第一个数组和第二个数组的下标访问一个学员的学号、语文、成绩。例如:如果需要访问学员2的数学成绩,可以通过Students[1][2]来访问学员2的数学成绩,Students[1][2]是访问数组的语法,后面一节会有讲述;再如,如果需要访问学员50的语文成绩,可以通过Students[49][1]来访问学员50的语文成绩。

类似于上面的数据结构,我们称之为二维数组,二维数组本质上是以数组作为数组元素的数组,访问二维数组的元素时,需要同时给出第一个数组的小标和第二个数组的下标。

进一步考虑,在上述例子中,如果学员的语文和数学成绩按学期来进行存储,其数据结构可用如下表格所示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

上面的表格结构为50行3列结构,但在语文和数学列单元中又嵌套了一个3行1列的子表,二维数组无法存储上面的表格数据。如果把语文和数学列单元的数据也用一个数组表示,就可以满足上述表格数据存储要求了,其数据结构如下图所示:

JAVA数组维数_跟我学java编程—理解数组结构的维数

图 9-5 三维数组数据结构

上图所示的数据结构中,Students为数组的名称,数组的长度为n,其数组元素本身也是一个长度为3的数组,该数组有三个元素,分别对应学员序号、语文成绩、数学成绩,其中语文成绩和数学成绩元素本是也是一个数组,该数组长度为n,记录了n个学期的考试成绩。这样就可以根据第一个数组、第二个数组的下标访问一个学员的学号,根据第一个数组、第二个数组和第三个数组的下标访问学员的学期成绩。例如:如果需要访问第一个学员的学员学号,可以通过Students[0][0]来访问第一个学员的学员学号;访问第一个学员语文第一学期的成绩,可以通过Students[0][1][0]来访问;访问第一个学员语文第n学期的成绩,可以通过Students[0][1][n]来访问。

类似于上面存储语文和数学学期成绩的数据结构,我们称之为三维数组,三维数组本质上是三层数组的嵌套,分为第一层数组、第二层数组、第三层数组。第一层数组的元素是第二层数组,第二层数组的元素是第三层数组。访问三维数组的元素时,需要同时给出三个数组的下标。

可以类推,数组的数据结构可有四维数组、甚至更多维数组,随着数组维数的增多,其数据存储复杂度和计算复杂度也相应提升。在编程应用中,一般常用的为一维数组、二维数组和三维数组。

■知识点拨

对数组的访问一般是通过下标进行的。在一维数组中,数组的下标是由一个数字构成的,通过这一个数字组成的下标对数组的内容进行访问;在二维数组中,数组的下标是由两个数字构成的,通过这两个数字组成的下标对数组的内容进行访问;在三维数组中,数组的下标是由三个数字构成的,通过这三个数字组成的下标对数组的内容进行访问。

■ 思考与练习

如果要编写一个简单的日常生活记账程序,要求记录每位家庭成员的消费记录,消费记录包括礼物支出、购物支出、交通支出。

请用二维数组描述该程序的存储结构,二维数组的结构可以通过表格给出,也可以按照教材中图9-4二维数据结构图给出。