Java程序设计入门与精通
第五章 数组和字符串 教学提示:本章主要介绍Java语言的数组和字符串,它们都是使用Java语言编制程序要经常使用的数据结构,熟练掌握这些数据结构是进一步学习Java程序设计的必要阶段。通过学习读者可以掌握数组的基本概念、数组的使用方法、数组与循环语句的综合应用,掌握字符串的基本概念和使用方法。
教学目标:掌握数组使用的一般步骤,了解String类字符串和StringBuffer类字符串的定义方法,熟练掌握数组和字符串的各种基本操作。
5.1 数组 5.1.1 什么是数组
数组是一组类型相同、名字相同的数据的总称,数组中的每个数据称为一个数组元素。例如:可以将50个学生的期末成绩组织成一个数组,则每个学生的成绩叫数组元素。每个元素都具有一个下标值,它是该元素在数组中的位臵。根据元素下标,就可以区分出同一数组中的不同数组元素。
5.1.2 一维数组
在Java语言中,使用数组一般要经历数组定义、分配内存及赋值三个步骤。 1.定义数组
定义数组也叫数组的声明,主要任务是定义数组的名称和数组中元素的数据类型。定义数组的形式有两种:
数组元素类型 数组名[ ];
数组元素类型 [ ] 数组名;
其中,数组元素类型可以是简单数据类型,也可以是对象数据类型。 数组名必须符合Java语言标识符规则,例如,以下定义语句都是合法的。 int student[]; boolean info[];
定义数组的作用只是告诉系统一个新的数组的名字和类型,数组本身并不能存放任何数组元素,定义阶段的数组值为null。
2.用new初始化数组
67
第五章 数组和字符串
用关键字new初始化数组的任务是:指定数组的长度并分配相应的内存空间。一些教材也将此称为“动态初始化数组”或“创建数组空间”。例如:
int[] a;
a = new int[50]; //表示给数组a分配内存空间,用来保存50个int类型的数字。 定义数组和动态初始化数组也可以合并为一条语句,例如: int a[] = new int[50];
String[] name = new String[30];
在动态初始化数组后,数组的默认值由其元素的类型决定。例如:整型数据的默认值为0,实型数据的默认值为0.0,布尔型数据的默认值为false。
3.赋初值初始化数组
赋初值初始化数组是指不使用系统的数组默认值,自行给数组赋初值。具体实施方法有以下2种:
(1)按照顺序依次给每个元素赋值。 例如给数组a赋值: a[0] = 81; a[1] = 90;
……
a[49] = 100;
(2)在定义数组的同时直接给数组赋初值。
此时,初值数据的个数就是数组的长度,数据与数据之间用逗号分隔,整个初值再用大括号括起来。例如:
int[] b = { 81,90,17,55,32, 98,37,25,100 };
String nums[] = { \4.数组元素的引用
在Java语言中,使用下标来标识数组中特定位臵的元素。其形式为:数组名[下标]。下标值由0开始到数组长度减1为止。以前面创建的a数组为例:a[0]表示数组中的第一个元素;a[49]表示数组中的最后一个元素。数组a的结构如图5-1所示。
图5-1 数组a的结构
5.数组的复制
事实上,每个数组都是Array类中的一个对象,在复制数组时有两种具体情况。
68
Java程序设计入门与精通
(1)两个数组指向同一个元素空间。
这是指我们定义并创建了一个数组,该数组在内存中具有一定的空间,然后又定义了另外一个数组,并让这个数组同样表示该内存空间中的数组元素。例如: int[] num_1 = {1, 2, 3, 4, 5, 6};
int[] num_2;
num_2 = num_1;
其中,数组num_2与数组num_1具有同样的元素,其关系如图5-2所示。
图5-2 数组num_1与num_2的关系
如果改变一个数组中某个元素的值,则另一个数组中相应位臵的元素值也随之改变。 (2)两个数组指向内容相同的两个元素空间。
如果要真正复制一个数组,使得我们在修改复制数组的值时,不会影响到源数组的话,则需要定义一个和源数组长度相同的数组,然后再把源数组中的元素一一复制给新的数组。
此时,数组num_1和num_2的关系如图5-3所示。
图5-3 数组num_1与num_2的关系
另外,求任何数组的长度都可以使用length方法: 数组名.length
如:num_1.length、 a.length等。
【例5-1】示例一维数组的构建与输出,并求数组平均值。 代码:
// Array1creat.java源程序
class Array1creat{ public static void main(String args[]){
int num1[]={1,2,3,4,5,6}; int num2[]; int j; float ave=0f;
69
第五章 数组和字符串
}
System.out.println(\数组num1各元素的值为:\for(j=0; j< num1.length ; j++) System.out.print(num1 [j]+\System.out.println();
System.out.println(\数组num1的长度为:\num2=num1;
System.out.println(\数组num2各元素的值为:\for(j=0; j< num2.length ; j++){ System.out.print(num2 [j]+\
ave = ave + num2 [j]; }
System.out.println();
ave = ave / num2.length;
System.out.println(\数组num2的平均值为:\}
程序运行结果如图5-4:
图5-4例5-1程序运行结果图
5.1.3 二维数组
1.定义二维数组
与定义一维数组类似,定义二维数组也有两种形式: (1)数组元素类型[][] 数组名; 例如: int[][] num; char[][] cc;
(2)数组元素类型 数组名 [][];
70