数组

• 数组(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 }

 

posted @ 2020-11-16 16:53  Dragon大白  阅读(68)  评论(0编辑  收藏  举报