第五章 数组与字符串 下载本文

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