
数组是有序数据的集合数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。§5.1一维数组一、一维数组的定义type arrayName[];其中类型(type)可以为Java中任意的数据类型包括简单类型组合类型数组名arrayName为一个合法的标识符[]指明该变量是一个数组类型变量。例如int intArray[];声明了一个整型数组数组中的每个元素为整型数据。与C、C不同Java在数组的定义中并不为数组元素分配内存因此[]中不用指出数组中元素个数即数组长度而且对于如上定义的一个数组是不能访问它的任何元素的。我们必须为它分配内存空间这时要用到运算符new其格式如下arrayNamenew type[arraySize];其中arraySize指明数组的长度。如intArraynew int[3];为一个整型数组分配3个int型整数所占据的内存空间。通常这两部分可以合在一起格式如下type arrayNamenew type[arraySize];例如int intArraynew int[3];二、一维数组元素的引用定义了一个数组并用运算符new为它分配了内存空间后就可以引用数组中的每一个元素了。数组元素的引用方式为arrayName[index]其中index为数组下标它可以为整型常数或表达式。如a[3]b[i](i为整型)c[6*I]等。下标 从0开始一直到数组的长度减1。对于上面例子中的in-tArray数来说它有3个元素分别为intArray[0]intArray[1]intArray[2]。注意没有intArray[3]。另外与C、C中不同Java对数组元素要进行越界检查以保证安全性。同时对于每个数组都有一个属性length指明它的长度例如intArray.length指明数组intArray的长度。例5.1public class ArrayTest{public static void main(String args[]){int i;int a[]newint[5];for(i0;i5;i)a[i]i;for(ia.length-1;i0;i--)System.out.println(a[i]a[i]);}}运行结果如下C:\java ArrayTesta[4]4a[3]3a[2]2a[1]1a[0]0该程序对数组中的每个元素赋值然后按逆序输出。三、一维数组的初始化对数组元素可以按照上述的例子进行赋值。也可以在定义数组的同时进行初始化。例如int a[]{12345};用逗号()分隔数组的各个元素系统自动为数组分配一定空间。与C中不同这时Java不要求数组为静态(static)。四、一维数组程序举例例5.2Fibonacci数列Fibonacci数列的定义为F1F21FnFn-1Fn-2(n3)public classFibonacci{public static void main(String args[]){int i;int f[]new int[10];f[0]f[1]1;for(i2;i10;i)f[i]f[i-1]f[i-2];for(i1;i10;i)System.out.println(F[i]f[i-1]);}}运行结果为C:\java FibonacciF[1]1F[2]1F[3]2F[4]3F[5]5F[6]8F[7]13F[8]21F[9]34F[10]55例5.3冒泡法排序(从小到大)冒泡法排序对相邻的两个元素进行比较并把小的元素交到前面。public class BubbleSort{public static void main(String args[]){int ij;int intArray[]{301-97025};int lintArray.length;for(i0;il-1;i)for(ji1;jl;j)if(intArray[i]intArray[j]){int tintArray[i];intArray[i]intArray[j];intArray[j]t;}for(i0;il;i)System.out.println(intArray[i]);}}运行结果为C:\java BubbleSort-91253070§5.2多维数组与C、C一样Java中多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组其每个元素又是一个一维数组。下面我们主要以二维数为例来进行说明高维的情况是类似的。一、二维数组的定义二维数组的定义方式为type arrayName[][];例如int intArray[][];与一维数组一样这时对数组元素也没有分配内存空间同要使用运算符new来分配内存然后才可以访问每个元素。对高维数组来说分配内存空间有下面几种方法1直接为每一维分配空间如int a[][]new int[2][3];2从最高维开始分别为每一维分配空间如int a[][]new int[2][];a[0]new int[3];a[1]new int[3];完成1中相同的功能。这一点与C、C是不同的在C、C中必须一次指明每一维的长度。二、二维数组元素的引用对二维数组中每个元素引用方式为arrayName[index1][index2] 其中index1、index2为下标可为整型常数或表达式如a[2][3]等同样每一维的下标都从0开始。三、二维数组的初始化有两种方式1直接对每个元素进行赋值。2在定义数组的同时进行初始化。如int a[][]{{23}{15}{34}};定义了一个3×2的数组并对每个元素赋值。四、二维数组举例例5.4矩阵相乘两个矩阵Am×n、Bn×l相乘得到Cm×l每个元素Cijaik*bk (i1..mn1..n)public class MatrixMultiply{public static void main(String args[]){int ijk;int a[][]new int[2][3];int b[][]{{1528}{5910-3}{27-5-18}};int c[][]new int[2][4];for(i0;i2;i)for(j0;j3;j)a[i][j](i1)*(j2);for(i0;i2;i){for(j0;j4;j){c[i][j]0;for(k0;k3;k)c[i][j]a[i][k]*b[k][j];}}System.out.println(\n***MatrixA***);for(i0;i2;i){for(j0;j3;j)System.out.print(a[i][j]);System.out.println();}System.out.println(\n***MatrixB***);for(i0;i3;i){for(j0;j4;j)System.out.print(b[i][j]);System.out.println();}System.out.println(\n***MatrixC***);for(i0;i2;i){for(j0;j4;j)System.out.print(c[i][j]);System.out.println();}}}其结果为C:\java MatrixMultiplyfor(j0;j4;j)System.out.print(c[i][j]);System.out.println();}}}其结果为C:\java MatrixMultiply***MatrixA***2 3 44 6 8***MatrixB***1 5 2 85 9 10 -32 7 -5 -18***MatrixC***25 65 14 -6550 130 28 -130