首页 理论教育 Java程序设计与应用开发-多维数组的使用与查找

Java程序设计与应用开发-多维数组的使用与查找

时间:2023-11-26 理论教育 版权反馈
【摘要】:但在Java语言中并没有真正的多维数组,所谓多维数组只是数组的数组。图3-5 规则的二维数组内存分配在二维数组中,若要取得二维数组的行数,只要在数组名后加上属性“.length”即可。注意,与一维数组一样,在声明多维数组时不能指定其长度,否则出错。在不平衡的二维数组中查找指定元素。

Java程序设计与应用开发-多维数组的使用与查找

虽然一维数组可以处理简单的数据,但是在实际的应用中仍显不足,所以Java语言提供了多维数组。但在Java语言中并没有真正的多维数组,所谓多维数组只是数组的数组。

1.二维数组

二维数组的声明方式与一维数组类似,内存的分配也一样是用new运算符。其声明与分配内存的格式如下:

978-7-111-44824-2-Part01-141.jpg

与一维数组不同的是,二维数组在分配内存时,必须告诉编译器二维数组行与列的个数。因此在上面格式中,“行数”是告诉编译器所声明的数组有多少行,“列数”则是赋值每行中有多少列,如:

978-7-111-44824-2-Part01-142.jpg

同样也可以用较为简洁的方式来声明数组,其格式如下:

978-7-111-44824-2-Part01-143.jpg

以该种方式声明的数组,在声明的同时就分配一块内存空间供该数组使用。如:

978-7-111-44824-2-Part01-144.jpg

虽然在应用上很像C语言中的多维数组,但两者还是有区别的,在C语言中定义一个二维数组,必须是一个m×n二维矩阵块,如图3-2所示。Java的多维数组不一定是规则的矩阵形式,如图3-3所示。这种各维长度不相等的多维数组称为不平衡数组(ragged array)。

978-7-111-44824-2-Part01-145.jpg

图3-2 C语言中二维数组必须是矩形

978-7-111-44824-2-Part01-146.jpg

图3-3 Java语言的二维数组不一定是矩形

例如,定义如下的数组:

978-7-111-44824-2-Part01-147.jpg

它表示定义了一个数组引用变量x,第一个元素为x[0],第n个元素变量为x[n-1]。x中从x[0]到x[n-1]的每个元素变量正好又是一个整数类型的数组引用变量。需要注意的是,这里只是要求每个元素都是一个数组引用变量,并没有要求它们所引用数组的长度是多少,也就是每个引用数组的长度可以不一样。例如:

978-7-111-44824-2-Part01-148.jpg

这两句代码表示数组x有3个元素,每个元素都是int[]类型的一维数组。相当于定义了3个数组引用变量,分别是int x[0][],int[]x[1]和int[]x[2],完全可以把x[0]当做一个普通的变量名。另外int x[0][],int[]x[1]这两个数组引用变量只是书写方式不同而已,其作用是一样的。这样表示的目的是帮助读者把x[0]和x[1]当成普通变量名来理解。

由于x[0]、x[1]和x[2]都是数组引用变量,因此必须对它们赋值,指向真正的数组对象,才可以引用这些数组中的元素。

978-7-111-44824-2-Part01-149.jpg

由此可以看出,x[0]和x[1]的长度可以是不一样的,数组对象中也可以只有一个元素。程序运行到此之后的内存分配情况如图3-4所示。

978-7-111-44824-2-Part01-150.jpg

图3-4 Java语言中的二维数组可以看成是多个一维数组

x[0]中的第二个元素用x[0][1]来表示,如果要将整数100赋给x[0]中的第二个元素,写法如下:

978-7-111-44824-2-Part01-151.jpg

如果数组对象是一个m×n形式的规则矩阵,可不必像上面的代码一样,先创建高维的数组对象后,再逐一创建低维的数组对象。完全可以用一句代码在创建高维数组对象的同时,创建所有的低维数组对象。如:(www.xing528.com)

978-7-111-44824-2-Part01-152.jpg

上面的代码创建了一个2×3形式的二维数组,其内存分配如图3-5所示。

978-7-111-44824-2-Part01-153.jpg

图3-5 规则的二维数组内存分配

在二维数组中,若要取得二维数组的行数,只要在数组名后加上属性“.length”即可。若要取得数组中某行元素的个数,则须在数组名后加上该行的下标,再加上“.length”。例如:

978-7-111-44824-2-Part01-154.jpg

注意:与一维数组相同,用new运算符为数组申请内存空间时,很容易在数组各维数的指定时出现错误,二维数组要求必须指定高层维数,例如:

●正确的申请方式,只指定数组的高层维数:

978-7-111-44824-2-Part01-155.jpg

●正确的申请方式,指定数组的高层维数和低层维数,如:

978-7-111-44824-2-Part01-156.jpg

●错误的申请方式,只指定数组的低层维数,如:

978-7-111-44824-2-Part01-157.jpg

●错误的申请方式,没有指定数组的任何维数,如:

978-7-111-44824-2-Part01-158.jpg

如果想直接在声明二维数组时就给数组赋初值,可以利用“{}”实现,只要在数组的声明格式后面再加上初值的赋值即可。其格式如下:

978-7-111-44824-2-Part01-159.jpg

同样需要注意的是,用户并不需要定义数组的长度,因此在数组名后面的方括号里并不必填写任何内容。此外,在花括号内还有几组花括号,每组花括号内的初值会依次赋值给数组的第1,2,…,n+1行元素。如:

978-7-111-44824-2-Part01-160.jpg

该语句中声明了一个整型数组a,数组有2行4列共8个元素。花括号里的两组初值会分别依次给各行里的元素存放,a[0][0]为11,a[0][1]为22,…,a[1][3]为99。注意,与一维数组一样,在声明多维数组时不能指定其长度,否则出错。如int b[2][3]={{1,2,3},{4,5,6}};该语句在编译时将出错。

【例3-4】在不平衡的二维数组中查找指定元素。

978-7-111-44824-2-Part01-161.jpg

978-7-111-44824-2-Part01-162.jpg

运行结果如下:

2.三维以上的多维数组

通过对二维数组的介绍,不难发现,要想提高数组的维数,只要在声明数组的时候将下标与方括号再加一组即可,所以三维数组的声明为int a[][][],而四维数组为int a[][][][],依次类推。使用多维数组时,输入、输出的方式和一、二维相同,但是每增加一维,嵌套循环的层数就必须多一层,所以维数越高的数组其复杂度也就越高。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈