• 数组(array)
– 元素(element)、下标(subscript)
– 一维数组、二维数组
– 遍历:依次访问集合中的每个元素,将所有元素逐个处理一遍
• 定义数组
– 先定义数组类型的引用变量
int iArray[ ]; // 定义一个int型数组的引用变量iArray
int [ ]iArray; // 定义一个int型数组引用变量iArray
– 再创建数组
iArray = new int[5];为数组动态分配内存
定义和创建合并成一步:int iArray[ ] = new int[5]; // 定义引用变量的同时创建数组
• 定义数组时的初始化
int iArray[ ] = { 2, 4, 6 };
• 数组的语法细则
int iArray[ ] = new int[5];
int aRef[ ] = iArray; 与iArray引用同一个数组对象
iArray.length
aRef.length
数组只能保存相同数据类型的集合,使用运算符new创建数组时,各数组元素,会被初始化为空值
• 访问数组
– 访问数组中的元素
int iArray[ ] = new int[5];
iArray[0]、iArray[1]、iArray[2]、iArray[3]、iArray[4]
iArray[0] = 10 ;
iArray[1] = 20 ;
System.out.println( iArray[0] ); // 显示结果:10
System.out.println( iArray[1] ); // 显示结果:20
System.out.println( iArray[2] ); // 显示结果:0
System.out.println( iArray[ 5 ] );程序执行出错,中途退出
System.out.println( iArray[ -1 ] );
int aRef[ ] = iArray;与iArray引用同一个数组对象
System.out.println( aRef[0] ); // 显示结果:10
– 数组的遍历
例3-15 一个遍历数组的Java演示程序(ArrayDemo.java)
1 public class ArrayDemo { // 主类 2 public static void main(String[] args) { // 主方法 3 int iArray[ ] = { 2, 4, 6, 8, 10 }; // 定义一个int型数组iArray,定义时初始化 4 for (int n = 0; n < iArray.length; n++) // 遍历数组,逐个显示各数组元素的值 5 System.out.println( iArray[n] ); // 显示第n个元素的值 6 // 遍历数组,计算各数组元素的累加和 7 int sum = 0; 8 for (int n = 0; n < iArray.length; n++) 9 sum += iArray[n]; // 累加第n个数组元素 10 System.out.println( sum ); 11 char cArray[ ] = { 'C', 'h', 'i', 'n', 'a' }; // 定义一个字符型数组cArray,定义时初始化 12 for (int n = 0; n < cArray.length; n++) { // 遍历数组,将所有小写字母改为大写 13 if (cArray[n] >= 'a' && cArray[n] <= 'z’) // 检查第n个元素是否小写字母 14 cArray[n] -= 32; // 如果是,则将小写字母改为大写 15 } 16 System.out.println( cArray ); // 只有字符数组才能整体输出,显示结果:CHINA 17 } 18 }
– 增强for语句
例3-16 一个遍历数组(增强for语句)的Java演示程序(EnhancedFor.java)
1 public class EnhancedFor { // 主类 2 public static void main(String[] args) { // 主方法 3 int iArray[] = { 2, 4, 6, 8, 10 }; // 定义一个int型数组iArray,定义时初始化 4 for (int x : iArray) // 增强for语句:依次将数组iArray中的元素取出来,赋值给x 5 System.out.println(x); // 显示所取出的值 6 // 遍历数组,计算各数组元素的累加和 7 int sum = 0; 8 for (int x : iArray) // 增强for语句:计算各数组元素的累加和 9 sum += x; // 累加所取出的值 10 System.out.println(sum); 11 char cArray[] = { 'C', 'h', 'i', 'n', 'a' }; // 定义一个字符型数组cArray,定义时初始化 12 for (char x : cArray) { // 增强for语句:依次将数组cArray中的元素取出来,赋值给x 13 if (x >= 'a' && x <= 'z') // 检查所取出的字符是否小写字母 14 x -= 32; // 将小写字母改为大写。注:此处只能修改x,无法修改数组元素 15 } 16 System.out.println(cArray); // 显示结果:China 17 // 可以看出,当需要修改数组元素时,还是只能用普通for语句 18 } 19 }
• 可变长形参
语法细则:①可变长形参中,形参的个数可变,但是要求各形参的数据类型是相同的,即可变形长形参只能有一种数据类型②调用可变长形参的方法时,可以向可变型形参传递零个或任意多个实参③可变长形参,是以数组的形式来接受实参的
– 通常,一个方法中的形参个数是确定的
int max(int x, int y) { …… }
int max(int x, int y, int z) { …… }
– 是否可以定义一个求任意多个数最大值的方法呢?
int max(int x1, int x2, …) { …… }
– Java可变长参数语法 不是一个变量,而是一个数组,该数组按位置顺序依次保存调用方法时所传递的实参值,可以通过数组的属性成员length来得到实参的个数
int max(int …varArgs) { // 在可变长形参名之前加“…”(3个点)
…… // 求最大值算法
}
例3-17 一个具有可变长形参的求最大值方法Java演示程序(VarArgument.java)
1 public class VarArgument { // 主类 2 public static int max(int... varArgs) { // 具有可变长形参的求最大值方法 3 // 可变长形参varArgs所接收到的实参是以数组形式存放的,varArgs是一个数组 4 if (varArgs.length < 1) 5 return 0; // 如果没有传递实参,则直接返回0 6 int result = varArgs[0]; // 先假设第0个元素就是最大值 7 for (int n = 1; n < varArgs.length; n++) { // 求数组元素中的最大值 8 if (varArgs[n] > result) 9 result = varArgs[n]; 10 } 11 /* 12 * 也可使用以下的增强for语句来求最大值 for (int e : varArgs) { if (e > result) result = e; } 13 */ 14 return result; 15 } 16 17 public static void main(String[] args) { // 主方法 18 System.out.println(max(2, 4)); // 传递2个实参,显示结果:4 19 System.out.println(max(2, 4, 6)); // 传递3个实参,显示结果:6 20 System.out.println(max(2, 4, 6, 8)); // 传递4个实参,显示结果:8 21 System.out.println(max(2)); // 传递1个实参,显示结果:2 22 System.out.println(max()); // 不传递实参,显示结果:0 23 } 24 }