
第7章数组与枚举 王绍卿
1 第7章 数组与枚举 王绍卿

导读 主要内容 数组的基本语法 ● 遍历数组 复制数组 排序与二分查找 枚举 难点 枚举 2025/4/2
2025/4/2 2 导读

§7.1创建数组 数组是相同类型的变量按顺序组成的一种复合数据 类型,称这些相同类型的变量为数组的元素或单元。数 组通过数组名加索引来使用数组的元素。 数组属于引用型变量,创建数组需要经过声明数组 和为数组分配变量两个步骤。 2025/4/2
2025/4/2 3 §7.1 创建数组 数组是相同类型的变量按顺序组成的一种复合数据 类型,称这些相同类型的变量为数组的元素或单元。数 组通过数组名加索引来使用数组的元素。 数组属于引用型变量,创建数组需要经过声明数组 和为数组分配变量两个步骤

§7.1.1声明数组 声明数组包括数组变量的名字(简称数组名)、数组的类型。 声明一维数组有下列两种格式: 数组的元素类型数组名: 数组的元素类型0数组名; 声明二维数组有下列两种格式: 数组的元素类型数组名0 数组的元素类型门数组名; 例如: float boy[]; char cat[][]; 注与C/C++不同,Jva不允许在声明数组中的方括号内指定数组元素的 个数。若声明:inta[12];或int[12]a,将导致语法错误。 2025/4/2
2025/4/2 4 §7.1.1 声明数组 声明数组包括数组变量的名字(简称数组名)、数组的类型。 声明一维数组有下列两种格式: 数组的元素类型 数组名[]; 数组的元素类型 [] 数组名; 声明二维数组有下列两种格式: 数组的元素类型 数组名[][]; 数组的元素类型 [][] 数组名; 例如: float boy[]; char cat[][]; 注 与C/C++不同,Java不允许在声明数组中的方括号内指定数组元素的 个数。若声明: int a[12]; 或 int [12] a; 将导致语法错误

§7.1.2 为数组分配元素一维数组 声明数组后,还必须为它分配内存空间,即创建数组。 为一维数组分配内存空间的格式如下: 数组名字=new数组元素的类型[数组元素的个数]: 例如:float boyl川,∥声明数组 boy=new float[4]; 声明数组和创建数组可以一起完成,例如: float boy=new float[4]; boy[0] 0x785BA boy[1] boy boy[2] boy[31 图7.1数组的内存模型
5 §7.1.2 为数组分配元素_一维数组 声明数组后,还必须为它分配内存空间,即创建数组。 为一维数组分配内存空间的格式如下: 数组名字 = new 数组元素的类型[数组元素的个数]; 例如:float boy[]; //声明数组 boy= new float[4]; float boy[]=new float[4];

§7.1.2 为数组分配元素二维数组 维数组和一维数组一样,在声明之后必须用new运算符为 数组分配内在空间。 例如:int mytwol如D; mytwo new int [3][4]; 声明数组和创建数组可以一起完成,例如: int mytwo=new int[3][4]; Java采用“数组的数组”来声明多维数组. 上述创建的二维数组mytwo就是由3个长度为4的一维数组: mytwo[0]、mytwo[1刂和mytwo[2]构成的。 构成二维数组的一维数组不必有相同的长度,在创建二维数 组时可以分别指定构成该二维数组的一维数组的长度,例如: int a=new int[3]0; 注:和C语言不同的是,Java允许使用int型变量的值指定数组的元素的 个数,例如: int size=30; double number[]=new double[size];
6 §7.1.2 为数组分配元素_二维数组 二维数组和一维数组一样,在声明之后必须用new运算符为 数组分配内在空间。 例如:int mytwo[][]; mytwo = new int [3][4]; 声明数组和创建数组可以一起完成,例如: int mytwo[][] = new int[3][4]; Java采用“数组的数组”来声明多维数组. mytwo 3 4 mytwo[0] mytwo[1] mytwo[2] int a[][]=new int[3][]; 注:和C语言不同的是,Java允许使用int型变量的值指定数组的元素的 个数,例如: int size=30; double number[]=new double[size];

§7.1.3数组元素的使用 维数组通过索引符访问自己的元素,如boy[0], boy[1]等。需要注意的是索引从0开始 0 二 维数组也通过索引符访问自己的元素,如a[0][1], a[1][2]等;需要注意的是索引从0开始。 比如声明创建了一个二维数组a: int a=new int[2][3]; 那么第一个索引的变化范围为从0到1,第二个索引 变化范围为从0到2。 2025/4/2
2025/4/2 7 §7.1.3 数组元素的使用 一维数组通过索引符访问自己的元素,如boy[0], boy[1]等。需要注意的是索引从0开始 。 二维数组也通过索引符访问自己的元素,如a[0][1], a[1][2]等;需要注意的是索引从0开始。 比如声明创建了一个二维数组a: int a[][] = new int[2][3] 那么第一个索引的变化范围为从0到1,第二个索引 变化范围为从0到2

§7.1.41 ength的使用 数组的元素的个数称作数组的长度。 对于一维数组,“数组名.lengthi”的值就是数组中 元素的个数。 对于二维数组“数组名.length”的值是它含有的一 维数组的个数。 例如,对于 float a=new float[12]; int b]=new int[3][6]; a.length的值12;而b.1 ength的值是3
8 §7.1.4 length的使用 数组的元素的个数称作数组的长度。 对于一维数组,“数组名.length”的值就是数组中 元素的个数。 对于二维数组“数组名.length”的值是它含有的一 维数组的个数。 例如,对于 float a[] = new float[12]; int b[][] = new int[3][6]; a.length的值12;而b.length的值是3

§7.1.5 数组的初始化 创建数组后,系统会给数组的每个元素一个默认的值,如, f1oat型是0.0。 在声明数组的同时也可以给数组的元素一个初始值,如: f1 oat boy[]={21.3f,23.89f,2.0f,23f,778.98f」: 也可以直接用若干个一维数组初始化一个二维数组,这些一 维数组的长度不尽相同, 例如: inta[][]={{1J,{1,1},{1,2,1),{1,3,3,1},{1,4,6,4,1}); 2025/4/2
2025/4/2 9 §7.1.5 数组的初始化 创建数组后,系统会给数组的每个元素一个默认的值,如, float型是0.0。 在声明数组的同时也可以给数组的元素一个初始值,如: float boy[] = { 21.3f,23.89f,2.0f,23f,778.98f}; 也可以直接用若干个一维数组初始化一个二维数组,这些一 维数组的长度不尽相同, 例如: int a[][]= {{1}, {1,1},{1,2,1}, {1,3,3,1},{1,4,6,4,1}};

§7.1.6数组的引用 数组属于引用型变量,因此两个相同类型的数组如果具有相 同的引用,它们就有完全相同的元素。 例如,对于int a=1,2,3,b[]=(4,5;数组变量a和b分别存放着 引用0x35ce36和0x757aef。 如果使用了下列赋值 0x35ce36 a[] Ox757aef a 语句(a和b的类型必须相同) 3 a[2] a=b;那么,a中存放 图7.2 数组a、b的内存模型 的引用和b的相同,这时 系统将释放最初分配给 b 数组a的元素,使得a的 0x757aef b[O Ox757aef 元素和b的元素相同。 b a、b的内存模型变成如图 7.2,图7.3所示。 图7.3ab后的数组a、b的内存模型 10
10 §7.1.6 数组的引用 数组属于引用型变量,因此两个相同类型的数组如果具有相 同的引用,它们就有完全相同的元素。 例如,对于int a[] = {1,2,3}, b[ ]= {4,5};数组变量a和b分别存放着 引用0x35ce36和0x757aef。 如果使用了下列赋值 语句(a和b的类型必须相同) a=b;那么,a中存放 的引用和b的相同,这时 系统将释放最初分配给 数组a的元素,使得a的 元素和b的元素相同。 a、b的内存模型变成如图 7.2,图7.3所示