欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java开发笔记(二十一)二维数组的扩展

程序员文章站 2024-02-01 19:23:04
前面介绍的数组容纳的是一串数字,仿佛一根线把这组数字串了起来,故而它只是一维数组。一维数组用来表示简单的数列尚可,要是表达复杂的平面坐标系,那就力不从心了。由于平面坐标系存在水平和垂直两个方向,因此可用二维数组来保存平面坐标系上的一组坐标顶点,其中第一维是顶点队列,第二维是顶点的横纵坐标。许多个平面 ......

前面介绍的数组容纳的是一串数字,仿佛一根线把这组数字串了起来,故而它只是一维数组。一维数组用来表示简单的数列尚可,要是表达复杂的平面坐标系,那就力不从心了。由于平面坐标系存在水平和垂直两个方向,因此可用二维数组来保存平面坐标系上的一组坐标顶点,其中第一维是顶点队列,第二维是顶点的横纵坐标。许多个平面组合起来变成一幅动画,每个平面都构成动画的一个帧,这样就形成了三维数组。二维数组、三维数组,乃至更多维度的数组,统称为多维数组。多维数组全由一维数组扩展而来,它们的用法大同小异,因而只要学会如何使用二维数组,即可举一反三运用其他多维数组。下面就以二维数组为例,统一介绍多维数组的常见用法。
如同一维数组那样,二维数组也有两种声明形式,一种是在变量名称后面添加两对方括号,例如“double triangle[][]”;另一种是在类型后面添加两对方括号,例如“int[][] triangle”。前述的二维数组triangle表示平面坐标系上的三角形,其中第一对方括号表示这个三角形有几个顶点,第二对方括号表示每个顶点由几个坐标方向构成。
给二维数组分配存储空间也有三种方式,分别说明如下:
1、利用语句“new 变量类型[顶点数量][方向数量]”分配空间,比如三角形triangle有三个顶点,每个顶点由横纵两个坐标方向组成,则可通过下面这行语句实现:

		// 在两对方括号内分别填入数字,表示数组有多少行多少列
		triangle = new double[3][2];

 

2、在分配存储空间的时候立即对数组进行初始化赋值,此时方括号中间不填数字,而在方括号后面添加花括号,并且花括号内部是以逗号分隔的几个一维数组。此时初始化赋值的代码如下所示:

		// 方括号内留空,然后紧跟花括号,花括号内部是以逗号分隔的几个一维数组
		double[][] triangle = new double[][]{
				new double[]{-2.0, 0.0},
				new double[]{0.0, -1.0},
				new double[]{2.0, 1.0}
		};

 

3、可见上面的第二种写法实在啰嗦,完全可以参照一维数组的简化写法,把多余的“new double***”统统去掉,于是整个初始化代码精简如下:

		// 赋值等号右边直接跟着花括号,花括号又内嵌好几个花括号分别表示对应的一维数组
		double[][] triangle = { {-2.0, 0.0}, {0.0, -1.0}, {2.0, 1.0} };

以上的赋值等号右边直接跟着花括号,花括号里面又有三组花括号,每组花括号分别容纳两个数字。这便告诉编译器:该二维数组需要分配三个顶点,并且每个顶点都有两个坐标方向。

若要获取二维数组里面的某个元素,可采取“数组名称[元素行号][元素列号]”的形式,表示当前操作的是第几行第几列的数组元素。与一维数组不同的是,对于二维数组来说,“数组名称.length”不能获得所有元素的数量,而是获得该数组的行数;要想获取某行的列数,则需通过“triangle[行号].length”来得到,把所有行的列数累加起来,才能求得该二维数组的元素个数。下面是声明一个浮点型的二维数组,并对每个数组元素赋值,最后遍历打印各元素的完整代码例子:

		// 以下是声明二维数组的第一种形式:“变量类型 数组名称[][]”
		double triangle[][];
		// 以下是分配二维数组空间的第一种形式
		// 在两对方括号内分别填入数字,表示数组有多少行多少列
		triangle = new double[3][2];
		// 数组名称后面的“[数字1][数字2]”,就是数组元素的行列下标,表示当前操作的是第几行第几列的数组元素
		triangle[0][0] = -2.0;
		triangle[0][1] = 0.0;
		triangle[1][0] = 0.0;
		triangle[1][1] = -1.0;
		triangle[2][0] = 2.0;
		triangle[2][1] = 1.0;
		// 下面通过循环语句依次读出数组中的所有元素。
		// “二维数组名称.length”表示获取该数组的行数
		for (int i=0; i<triangle.length; i++) {
			// “triangle[i].length”表示获取该数组第i行的列数
			for (int j=0; j<triangle[i].length; j++) {
				// 打印第i行第j列的数组元素
				system.out.println("triangle["+i+"]["+j+"]="+triangle[i][j]);
			}
		}

 

上述示例代码中的二维数组,存放了平面坐标系上的三个顶点,它们的坐标分别是(-2.0, 0.0)、(0.0, -1.0)、(2.0, 1.0)。这三个坐标点构成了一个三角形的三个顶点,正如下图所示的a点(坐标为(-2,0))、b点(坐标为(0,-1))、c点(坐标为(2,1))。

Java开发笔记(二十一)二维数组的扩展

看到了熟悉的平面坐标图,这下平面几何的知识可派上用场了,例如根据两点的坐标来计算两点之间的距离。既然三角形有三个顶点a、b、c,接下来不妨计算它的三条边长,包括ab、ac和bc三条边的长度。于是分别求得两个顶点在横轴方向的距离,以及在纵轴方向的距离,然后利用勾股定理算出连接两顶点的斜边长度。以下便是由二维数组保存的坐标数值求解三角形各边长的演示代码:

		// 下面通过循环语句依次计算三角形每条边的长度
		// 假设第一个数组元素代表点a,第二个数组元素代表点b,第三个数组元素代表点c,
		// 则本循环将依次求得ab、ac、bc这三条边的长度
		for (int i=0; i<triangle.length-1; i++) {
			for (int j=i+1; j<triangle.length; j++) {
				// 获取两个顶点在横轴方向的距离
				double xdistance = math.abs(triangle[j][0] - triangle[i][0]);
				// 获取两个顶点在纵轴方向的距离
				double ydistance = math.abs(triangle[j][1] - triangle[i][1]);
				// 根据勾股定理计算连接两顶点的斜边长度
				double distance = math.sqrt(xdistance*xdistance + ydistance*ydistance);
				system.out.println("i="+i+",j="+j+",distance="+distance);
			}
		}

 

运行上述的演示代码,打印出来的三角形边长计算结果如下所示:

i=0,j=1,distance=2.23606797749979
i=0,j=2,distance=4.123105625617661
i=1,j=2,distance=2.8284271247461903