第3章数组与字符串_第1页
第3章数组与字符串_第2页
第3章数组与字符串_第3页
第3章数组与字符串_第4页
第3章数组与字符串_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3 3章章数组与字符串数组与字符串 在程序设计中,数组类型是一种表示数据集合在程序设计中,数组类型是一种表示数据集合的常用手段,字符串是一种表示姓名、提示信的常用手段,字符串是一种表示姓名、提示信息等类似数据的常见形式。在息等类似数据的常见形式。在JavaJava语言中,为语言中,为数组类型与字符串都定义了相应的标准类,数组类型与字符串都定义了相应的标准类,ArraysArrays是实现数组类型的组织与操作的类,是实现数组类型的组织与操作的类,StringString是实现字符串存储与操作的类。这样既是实现字符串存储与操作的类。这样既体现了体现了JavaJava面向对象的完整性,又增强了这

2、两面向对象的完整性,又增强了这两种数据的操作能力,为简化程序设计过程,提种数据的操作能力,为简化程序设计过程,提高程序的可靠性提供了可能性。高程序的可靠性提供了可能性。 3.1 3.1 数组类型数组类型 根据数据类型的构成方式不同,可以将所有的根据数据类型的构成方式不同,可以将所有的数据类型分成两个类别:数据类型分成两个类别:简单数据类型简单数据类型和和复合复合数据类型数据类型。所谓。所谓简单简单是指用于组织单值数据的是指用于组织单值数据的数据类型;所谓数据类型;所谓复合复合是指组织数据集合的数据是指组织数据集合的数据类型类型. . 由惟一确定某个数组元素所需要的下标个数可由惟一确定某个数组元

3、素所需要的下标个数可以将数组分为以将数组分为一维数组一维数组、二维数组二维数组及多维数组。及多维数组。 3.1.1 3.1.1 一维数组一维数组 所谓一维数组是指每个元素由一个下标值惟一所谓一维数组是指每个元素由一个下标值惟一确定的数组类型。这是一种使用十分频繁的数确定的数组类型。这是一种使用十分频繁的数据类型,它的特征明显、操作方便、易于理解,据类型,它的特征明显、操作方便、易于理解,是每个程序设计者在编写程序的过程中无法回是每个程序设计者在编写程序的过程中无法回避使用的一种数据类型。避使用的一种数据类型。 1. 1. 一维数组的定义一维数组的定义 定义数组型变量的语法格式为:定义数组型变量

4、的语法格式为: 数组元素类型数组元素类型 数组型变量名数组型变量名; ; 或者或者 数组元素类型数组元素类型 数组型变量名数组型变量名 ; ; “数组元素类型数组元素类型”为组成一维数组的元素类型,为组成一维数组的元素类型,“数组型变量名数组型变量名”为定义的数组型变量名称,为定义的数组型变量名称,它应该符合它应该符合JavaJava语言的标识符命名规则,建议语言的标识符命名规则,建议遵守遵守JavaJava语言的标识符命名规范。语言的标识符命名规范。 int intArray; 或者或者 int intArray ; float floatArray; 或者或者 float floatArr

5、ay ; String stringArray; 或者或者 String stringArray ; 建议使用前一种格式风格,这种格式风格的好处是建议使用前一种格式风格,这种格式风格的好处是将数据类型集中表示,即前面是数据类型,后面是将数据类型集中表示,即前面是数据类型,后面是变量名称,而后面一种格式风格的数据类型被变量变量名称,而后面一种格式风格的数据类型被变量名称分隔为前后两个部分。名称分隔为前后两个部分。Java语言保留这种定义语言保留这种定义格式风格完全是为了尊重人们的使用习惯。格式风格完全是为了尊重人们的使用习惯。2. 2. 一维数组的创建一维数组的创建 一个数组可以包含多个元素,所

6、含的元素数目一个数组可以包含多个元素,所含的元素数目被称为数组的长度,数组中也可以没有任何元被称为数组的长度,数组中也可以没有任何元素,此时称为空数组。正因为如此,在创建数素,此时称为空数组。正因为如此,在创建数组时需要给出组成数组的元素数目。下面是利组时需要给出组成数组的元素数目。下面是利用用newnew运算符创建数组的语法格式:运算符创建数组的语法格式: newnew数组元素类型数组元素类型 数组元素数目数组元素数目; “数组元素类型数组元素类型”为组成数组的元素类型,为组成数组的元素类型,“数组元素数目数组元素数目”为组成数组的元素数目,这为组成数组的元素数目,这个值要求大于或等于零。个

7、值要求大于或等于零。 intArrayintArray由由100100个个intint类型的元素组成类型的元素组成intArray = intArray = new int100; new int100; floatArrayfloatArray由由5050个个floatfloat类型的元素组成类型的元素组成floatArray = new float50; stringArrayfloatArray = new float50; stringArray由由1010个个StringString类型的元素组成类型的元素组成stringArray = new String10;stringArra

8、y = new String10;也可以将数组的定义与创建合并也可以将数组的定义与创建合并char name = new char30;char name = new char30;double doubleData = new double10; double doubleData = new double10; 0123426272829name0123456789doubleData3. 3. 一维数组的初始化一维数组的初始化 在创建数组的同时,为数组元素赋予初始值的过程被称为在创建数组的同时,为数组元素赋予初始值的过程被称为数数组的初始化组的初始化。 int intArray = 10

9、,20,30,40,50,60,70,80,90,100; 操作过程:首先为操作过程:首先为intArray数组分配数组分配10个个int型元素所需要占型元素所需要占用的存储空间,然后将初始值用的存储空间,然后将初始值10,20,30,40,50,60,70,80,90,100依次赋给依次赋给intArray0intArray9。3. 3. 一维数组的初始化一维数组的初始化 String name = zhang, wang, li, zhao; 由于在由于在Java语言中字符串属于语言中字符串属于String类对象,所以这条语句类对象,所以这条语句的操作过程会稍复杂一些。首先,要为的操作过程

10、会稍复杂一些。首先,要为4个个String型引用分型引用分配存储空间,然后再根据配存储空间,然后再根据4个初始值为个初始值为4个字符串分配存储空个字符串分配存储空间,最后将初始值间,最后将初始值zhang,wang,li,zhao 的引用的引用依次赋给依次赋给name0name3。 4. 4. 一维数组元素的访问一维数组元素的访问 创建数组后,就可以通过引用访问数组元素以达到对数组创建数组后,就可以通过引用访问数组元素以达到对数组操作的目的。操作的目的。 JavaJava访问数组元素的格式为:访问数组元素的格式为: arrayNamearrayName下标表达式下标表达式 在运行程序时,在运行

11、程序时,JavaJava语言会严格地检查每个语言会严格地检查每个“下标表达式下标表达式”的取值范围,一旦发生越界就会抛出的取值范围,一旦发生越界就会抛出ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException异常。异常。 当需要对数组中的每个元素进行操作时,可以利用数当需要对数组中的每个元素进行操作时,可以利用数组对象中封装的组对象中封装的lengthlength属性获得当前数组中包含的元属性获得当前数组中包含的元素数目。素数目。 int value = 10,9,40,20,12,8,9; for (int i = 0, sum

12、 = 0; i value.length; i+) sum += valuei; 在在forfor语句中,将循环上界设定为语句中,将循环上界设定为value.lengthvalue.length的好处的好处是:当是:当valuevalue数组的长度发生变化时不需要修改程序的数组的长度发生变化时不需要修改程序的其他地方。其他地方。 在在JDK 5.0版本中增加了一个专门用于操作数据集合的循环版本中增加了一个专门用于操作数据集合的循环流程控制语句流程控制语句for each,其功能更加强大、书写更加简洁。,其功能更加强大、书写更加简洁。这种语句的书写格式为:这种语句的书写格式为: for (数组元

13、素型变量数组元素型变量 :数组型变量:数组型变量) 语句语句; “数组元素型变量数组元素型变量”是与数组元素同类型的变量,是与数组元素同类型的变量, “数组型变量数组型变量”是一个表示数组引用的变量。是一个表示数组引用的变量。 例如,可以将上述数组元素累加的程序段改写成:例如,可以将上述数组元素累加的程序段改写成: int sum = 0; for (int v : value) sum += v; 这条语句的执行过程可以描述为:循环访问这条语句的执行过程可以描述为:循环访问value数组中的每数组中的每个元素并将其内容累加到变量个元素并将其内容累加到变量sum中。中。 5. 5. 一维数组的

14、复制一维数组的复制 在在Java语言中,数组型变量可以实现两种形式的复制语言中,数组型变量可以实现两种形式的复制操作。操作。 第一种复制操作被称为数组引用的复制第一种复制操作被称为数组引用的复制 int firstArray = 10,20,30,40,50,60; int secondArray; secondArray = firstArray; 这条赋值语句的执行效果是将这条赋值语句的执行效果是将firstArray的引用信息赋的引用信息赋给给secondArray,此时,此时firstArray与与secondArray共同引共同引用一个数组。用一个数组。 arraycopy是是Sys

15、tem类中的一个静态方法。类中的一个静态方法。 定义格式为:定义格式为: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 其中,其中,src为被拷贝的原始数组,为被拷贝的原始数组,srcPos为原始数为原始数组中将要拷贝的数组元素的起始位置,组中将要拷贝的数组元素的起始位置,dest为目为目标数组,标数组,destPos为拷贝到目标数组中后放置数组为拷贝到目标数组中后放置数组元素的起始位置,元素的起始位置,length为拷贝的数组元素数目。为拷贝的数组元素数目。int arraySrc =

16、 5,10,15,20,25,30,35,40,45,50;int arrayDest = new int10;执行语句:执行语句:System.arraycopy(arraySrc, 0, arrayDest, 0, 10) ; 举例:举例:假设有假设有n n个候选人参加学生会主席的竞选,最后将根个候选人参加学生会主席的竞选,最后将根据学生的投票情况决定学生会主席的获胜人选。编写一个程据学生的投票情况决定学生会主席的获胜人选。编写一个程序,完成选票的统计工作,并显示最终的获胜者。序,完成选票的统计工作,并显示最终的获胜者。 分析:分析:为了利用程序解决这个问题,假设为每位候选人编号为了利用程

17、序解决这个问题,假设为每位候选人编号1. n1. n。如果希望为某位候选人投票时,只需要从键盘上输。如果希望为某位候选人投票时,只需要从键盘上输入这位候选人的编号即可。入这位候选人的编号即可。 每位候选人所获的选票的存储在一个含有每位候选人所获的选票的存储在一个含有n n个元素的一维数个元素的一维数组中。由于含有组中。由于含有n n个元素的一维数组的下标范围在个元素的一维数组的下标范围在0.n-10.n-1之之间,所以,在程序实现中,需要将候选人的编号与数组元素间,所以,在程序实现中,需要将候选人的编号与数组元素的下标做一个映射,即的下标做一个映射,即1 1号候选人在数组中用下标号候选人在数组

18、中用下标0 0表示,表示,2 2号候选人在数组中用下标号候选人在数组中用下标1 1表示,依此类推,表示,依此类推,n n号候选人在数号候选人在数组中用下标组中用下标n-1n-1表示。表示。 在在JavaJava语言中,一维数组的元素可以属于任意语言中,一维数组的元素可以属于任意类型,包括基本数据类型和引用数据类型。也类型,包括基本数据类型和引用数据类型。也就是说,一维数组的元素又可以是一维数组类就是说,一维数组的元素又可以是一维数组类型,这就支持了二维数组,乃至多维数组的概型,这就支持了二维数组,乃至多维数组的概念。由于可以借助于二维数组表示具有二维关念。由于可以借助于二维数组表示具有二维关系

19、的数据,所以它的应用十分广泛。系的数据,所以它的应用十分广泛。 3.1.2 3.1.2 二维数组二维数组1. 1. 二维数组的定义与创建二维数组的定义与创建 JavaJava语言规定,二维数组的定义格式为:语言规定,二维数组的定义格式为: 数组元素类型数组元素类型 数组型变量名数组型变量名; ; 或者或者 数组元素类型数组元素类型 数组型变量名数组型变量名 ; ; 或者或者 数组元素类型数组元素类型 数组型变量名数组型变量名 ; ; “数组元素类型数组元素类型”为二维数组的元素类型,为二维数组的元素类型, “数组型变量名数组型变量名”为二维数组型变量名称。为二维数组型变量名称。 int int

20、Array; float floatArray ; double doubleArray ; 在这在这3种定义格式中,建议使用第一种格式。第种定义格式中,建议使用第一种格式。第二种格式完全是为了尊重那些习惯使用二种格式完全是为了尊重那些习惯使用C/C+定定义格式的人们而保留的,第三种格式清晰度较差,义格式的人们而保留的,第三种格式清晰度较差,不提倡使用。不提倡使用。 创建二维数组的格式为:创建二维数组的格式为: new 数组元素类型数组元素类型行数行数列数列数; 其中,其中,“数组元素类型数组元素类型”为二维数组元素的类为二维数组元素的类型型, “行数行数”与与“列数列数”表明了陈列在行方向与

21、表明了陈列在行方向与列方向的元素数量。列方向的元素数量。 例如,例如, intArray = new int105; floatArray = new float34;int intArray = new int105;等价于:等价于:intArray = new int10;for (int i = 0; i 10; i+) intArrayi = new int5;每行元素个数不同每行元素个数不同floatArray = new float5 ;for (int i = 0; i 5; i+) floatArrayi = new floati+1;2. 2. 二维数组的初始化二维数组的初始

22、化 int intArray=1,2,3,4, 5,6,7,8, 9, 10, 11,12; 执行效果:首先创建二维数组,然后,将第执行效果:首先创建二维数组,然后,将第1个括号中的个括号中的3个数值分别赋给第个数值分别赋给第1行的行的3个元素;再将第个元素;再将第2个括号中的个括号中的3个个数值分别赋给第数值分别赋给第2行的行的3个元素;最后将第个元素;最后将第3个括号中的个括号中的3个个数值分别赋给第数值分别赋给第3行的行的3个元素。初始化后的数组元素状态个元素。初始化后的数组元素状态为:为:3. 3. 二维数组元素的访问二维数组元素的访问 创建二维数组之后,可以通过引用型的二维数组变量对

23、数创建二维数组之后,可以通过引用型的二维数组变量对数组元素进行操作了。二维数组必须用两个下标惟一地确定组元素进行操作了。二维数组必须用两个下标惟一地确定元素,第一个下标为行下标,第二个下标为列下标,下标元素,第一个下标为行下标,第二个下标为列下标,下标的起始编号从的起始编号从0 0开始。开始。 int intArray = new int54; 举例:利用二维数组表示矩阵,并实现两个矩阵举例:利用二维数组表示矩阵,并实现两个矩阵相乘的操作。相乘的操作。 矩阵可以用来表示统计数据等方面的各种有关联矩阵可以用来表示统计数据等方面的各种有关联的数据。在数学上的数据。在数学上, ,矩阵可以是由方程组的

24、系数矩阵可以是由方程组的系数及常数构成的方阵。下面给出一个方程组与之对及常数构成的方阵。下面给出一个方程组与之对应的矩阵表示。应的矩阵表示。 在矩阵的运算中,要求两个相乘的矩阵必须满在矩阵的运算中,要求两个相乘的矩阵必须满足第足第1 1个矩阵的列数等于第个矩阵的列数等于第2 2个矩阵的行数。即个矩阵的行数。即对于对于 Am1Am1n1n1和和Bm2Bm2n2,n2,要求要求n1=m2n1=m2,且结果,且结果矩阵矩阵C C的行列数为的行列数为m1m1n2n2,其中的每个元素内,其中的每个元素内容为容为 bacjknkkiji,11,public static void enterMatrix(

25、int m, int row, int col) / 输入矩阵输入矩阵 for (int i = 0; i row; i+) for (int j = 0; j col; j+) mij = (int) Math.round(Math.random() * 10); public static void printMatrix(int m, int row, int col) / 显示矩阵显示矩阵 System.out.println(); for (int i = 0; i row; i+) for (int j = 0; j col; j+) System.out.printf(%4d,m

26、ij); System.out.println(); System.out.println(); public static void MulMatrix(int a, int row1, int col1, int b, int row2, int col2, int c) / 两个矩阵相乘两个矩阵相乘 for (int i = 0; i row1; i+) for (int j = 0; j col2; j+) cij = 0; for (int k = 0; k col1; k+) cij += aik * bkj; 3.2 3.2 字符串与字符串与StringString类类l 在在J

27、ava语言中提供了两种字符串:语言中提供了两种字符串: 一类是一类是String标准类实现的字符串常量;标准类实现的字符串常量; 另一类是另一类是StringBuffer标准类实现的可编辑修改标准类实现的可编辑修改的字符串。的字符串。 l 与与C语言一样,语言一样,Java语言中的字符串直接量使语言中的字符串直接量使用双引号将字符序列括在其中。用双引号将字符序列括在其中。 this is a string literal! 这样书写的直接量将属于这样书写的直接量将属于String类。类。 除了直接书写字符串直接量以外,还可以将某除了直接书写字符串直接量以外,还可以将某个字符串存储在个字符串存储

28、在StringString的类对象中。由于的类对象中。由于StringString类提供了很多对字符串常量操作的成员类提供了很多对字符串常量操作的成员方法,所以,这样做既便于字符串的重复利用,方法,所以,这样做既便于字符串的重复利用,又可以提高应用字符串的控制能力。又可以提高应用字符串的控制能力。 String类被定义在类被定义在java.lang包中。包中。 使用使用String类表示字符串需要经过定义、创建、类表示字符串需要经过定义、创建、初始化和访问几个阶段。初始化和访问几个阶段。 定义一个定义一个String类对象的语法格式为:类对象的语法格式为: String 字符串变量名字符串变量

29、名; 其中,其中,String为类名,为类名, “字符串变量名字符串变量名”为对象名。为对象名。 需要注意,这里定义的字符串对象只是一个引需要注意,这里定义的字符串对象只是一个引用型变量,需要按照下列格式创建及初始化对用型变量,需要按照下列格式创建及初始化对象。象。 字符串变量名字符串变量名 = 字符串值字符串值; 或或 字符串变量名字符串变量名 = new String(字符串值字符串值); “字符串变量名字符串变量名”为引用型的为引用型的String类对象,类对象,“字符串值字符串值”为字符串直接量或另外一个引用为字符串直接量或另外一个引用型的型的String类对象。类对象。 String

30、 str1, str2, str3;str1 = This is a string; str2 = new String(This is a string); str3 = str1; 在使用在使用Sting类对象时需要注意几点:类对象时需要注意几点:l 在在Java语言中,字符串直接量中的每个字符使语言中,字符串直接量中的每个字符使用用Unicode编码,占用两个字节。编码,占用两个字节。l 如果定义如果定义String类对象之后,没有引用任何一类对象之后,没有引用任何一个字符串,就应该赋予个字符串,就应该赋予null。l String类对象所引用的字符串是常量,不能对类对象所引用的字符串是

31、常量,不能对其字符串内容进行修改。其字符串内容进行修改。l String类提供了很多成员方法,可以通过这些类提供了很多成员方法,可以通过这些方法更方便、灵活地使用字符串。方法更方便、灵活地使用字符串。 举例:判断给定的字符串是否为回文字符串。举例:判断给定的字符串是否为回文字符串。 所谓回文字符串是指将字符串逆置后与原字符串相同。所谓回文字符串是指将字符串逆置后与原字符串相同。例如,例如,“ABCDCBA”ABCDCBA”逆置后还是逆置后还是“ABCDCBA”ABCDCBA”,这是一,这是一个回文字符串;但个回文字符串;但“Program”Program”逆置后为逆置后为“margorP”ma

32、rgorP”,与原字符串不相同,这不是回文字符串。与原字符串不相同,这不是回文字符串。 public static boolean isPalindrome(String str) /判断判断str是否为回文字符串是否为回文字符串 int len = str.length(); /返回字符串长度返回字符串长度 for (int index = 0; index len / 2 - 1; index+) if (str.charAt(index) != str.charAt(len - index - 1) /对称的两个字符比较对称的两个字符比较 return false; return tru

33、e; 3.3 3.3 数组操作与数组操作与ArraysArrays类应用类应用 Arrays是是Java类库提供的一个位于类库提供的一个位于java.util包包中的标准类,其中包含了许多静态成员方法,中的标准类,其中包含了许多静态成员方法,通过它们可以方便地对数组进行排序、比较与通过它们可以方便地对数组进行排序、比较与填充等一系列操作,由于这些成员方法都是经填充等一系列操作,由于这些成员方法都是经过精心设计、严格检测,所以,这样不但可以过精心设计、严格检测,所以,这样不但可以大大地减轻程序设计人员的负担,还可以提高大大地减轻程序设计人员的负担,还可以提高程序的质量、增加程序的清晰度与优化程序的程序的质量、增加程序的清晰度与优化程序的执行效率。执行效率。 3.4 3.4 综合应用举例综合应用举例 举例举例:随机产生若干个整数,并采用选择排序的算法,:随机产生若干个整数,并采用选择排序的算法,按照从大到小重新进行排列。按照从大到小重新进行排列。 问题分析问题分析:这是一的典型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论