在AP CS A Exam中,只考察两种数组(arrays)类型:
一维数组(1-dimensional arrays)和二维数组(2-dimensional arrays),下面我们分别来仔细看一下具体考察的内容。
1. 1-dimensional arrays
所谓数组(arrays)就是用来存储一个元素个数固定且元素类型相同的有序集合。
一维数组里面的元素(elements)可以是原始类型(primitive types),也可以是对象(objects),比如: int[] 和 double[] 就属于原始类型数组(arrays of primitive types);String[] 就属于对象数组(arrays of objects)。
在同一个数组中,所有元素都必须是同一种类型,比如都是int型,或者都是double型。
我们可以使用关键词new来给数组进行初始化,比如:
int[] arr = new int[10];
上述代码声明了一个int型数组变量arr,并进行了初始化。
这里的数字10就是这个数组中的元素的个数,或者称作这个数组的长度(使用arr.length获取数组arr的长度)。
需要特别注意的是,数组的长度一旦确定,就不能够再变化,这是和动态数组(ArrayList)的区别之一。
另外,当我们使用上述代码进行数组的初始化之后,数组里面的元素是有初始值的,初始值是0;如果是double型的一维数组,元素的初始值就是0.0;如果是String型的一维数组,元素的初始值就是null。
当然,如果你想要改变数组中元素的初始值,也可以再给元素进行赋值操作。
我们还可以使用另外一种简捷的方法对数组进行初始化,比如:
int[] arr = {1, 2, 3};
这样我们就同时完成了初始化和给数组元素进行赋值的操作。
如果我们需要对数组中的某个元素进行访问,我们就需要用到数组的索引(index),所谓索引,就是每个元素的序号。
每个数组的index都是从0开始的;如果一个数组的长度是n,那么它的 index 就是从0到n-1。
如果程序使用了一个非法的index来访问一个数组的元素,程序运行时就会出现异常(ArrayIndexOutOfBoundsException)。
最后,考生还需要掌握如何使循环(loops)去遍历(traverse)数组中的每一个元素。
2. 2-dimensional arrays
二维数组(2-dimensional arrays)里的元素是一维数组,这些一维数组的长度都相等,而且都是同一种数据类型。
所以,我们可以将二维数组看做是一个长方形矩阵,比如:
int[][] arr = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}};
这里的二维数组中有4个元素,这4个元素都是int型的一维数组,每个一维数组都由3个int型数据元素组成。
于是,我们就可以使用如下矩阵表示这个二维数组: 观察上表我们可以看到,这是一个4*3的矩阵,4代表的是行数(the number of rows),3代表的是列数(the number of columns)。
所以一个二维数组的长度(arr.length)既可以看做是这个二维数组中所包含的一维数组的个数,也可以看做是这个二维数组矩阵的行数。
而列数实际上就是每个一维数组的长度,所以我们可以通过访问第一个元素,来获得这个二维数组的列数,在这里就是arr[0].length。
对于上面的二维数组来说,如果我们想要访问矩阵中的某一个元素,我们需要知道这个元素所在的行索引和列索引,比如arr[1][2]访问的就是行索引为1、列索引为2的那个元素,在这里就是整数6。
当然我们也可以只是用行索引来访问一个二维数组的某个一维数组,比如,在这里arr[2]指向的就是{7, 8, 9}这个一维数组。
注意,数组变量是参数类型(reference type)。
在考试中,考生需要能够从二维数组中通过行索引获取其中某个一维数组,并将这个一维数组赋值给另外一个一维数组变量,比如我们可以将上面的二维数组中的第二个元素赋值给一个新的一维数组:
int[] arrNew = arr[1];
上述代码就会将{4, 5, 6}这个一维数组赋值给arrNew这个新的一维数组。
当然,考生还要能够将二维数组中的某一行(一维数组)作为参数进行传递,以及能够通过循环去遍历(traverse)每一行的每一个元素。
最后给大家留一个小问题:
String[] arr = new String[3];
请问上面这个数组中的3个元素的值分别是什么?
© 2024. All Rights Reserved. 沪ICP备2023009024号-1