Java程序设计 第03章 数据与字符串ppt课件_第1页
Java程序设计 第03章 数据与字符串ppt课件_第2页
Java程序设计 第03章 数据与字符串ppt课件_第3页
Java程序设计 第03章 数据与字符串ppt课件_第4页
Java程序设计 第03章 数据与字符串ppt课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

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 floatArra

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

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

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

8、 new String10;也可以将数组的定义与创建合并也可以将数组的定义与创建合并char name = new char30;char name = new char30;double doubleData = new double10; double doubleData = new double10; 0 01 12 23 34 42626272728282929name0 01 12 23 34 45 56 67 78 89 9doubleData3. 3. 一维数组的初始化一维数组的初始化 在创建数组的同时,为数组元素赋予初始值的过程在创建数组的同时,为数组元素赋予初始值的过程被称

9、为数组的初始化。被称为数组的初始化。 int intArray = 10,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访问数组元素的格式为:访问数组元素的格式为: arr

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

12、9,40,20,12,8,9; int value = 10,9,40,20,12,8,9; for (int i = 0, sum = 0; i for (int i = 0, sum = 0; i value.length; i+) value.length; i+) sum += valuei; sum += valuei; 在在forfor语句中,将循环上界设定为语句中,将循环上界设定为value.lengthvalue.length的好处是:当的好处是:当valuevalue数组的长度数组的长度发生变化时不需要修改程序的其他地方。发生变化时不需要修改程序的其他地方。 在在JDK 5.

13、0版本中增加了一个专门用于操作数据集版本中增加了一个专门用于操作数据集合的循环流程控制语句合的循环流程控制语句for each,其功能更加强大、,其功能更加强大、书写更加简洁。这种语句的书写格式为:书写更加简洁。这种语句的书写格式为: for (数组元素型变量数组元素型变量 :数组型变量:数组型变量) 语句语句; “数组元素型变量是与数组元素同类型的变量,数组元素型变量是与数组元素同类型的变量, “数组型变量是一个表示数组引用的变量。数组型变量是一个表示数组引用的变量。 例如,可以将上述数组元素累加的程序段改写成:例如,可以将上述数组元素累加的程序段改写成: int sum = 0; for

14、(int v : value) sum += v; 这条语句的执行过程可以描述为:循环访问这条语句的执行过程可以描述为:循环访问value数数组中的每个元素并将其内容累加到变量组中的每个元素并将其内容累加到变量sum中。中。 5. 5. 一维数组的复制一维数组的复制 在在Java语言中,数组型变量可以实现两种形式语言中,数组型变量可以实现两种形式的复制操作。的复制操作。 第一种复制操作被称为数组引用的复制第一种复制操作被称为数组引用的复制 int firstArray = 10,20,30,40,50,60; int secondArray; secondArray = firstArray;

15、 这条赋值语句的执行效果是将这条赋值语句的执行效果是将firstArray的引的引用信息赋给用信息赋给secondArray,此时,此时firstArray与与secondArray共同引用一个数组。共同引用一个数组。 arraycopy是是System类中的一个静态方法。类中的一个静态方法。 定义格式为:定义格式为: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 其中,其中,src为被拷贝的原始数组,为被拷贝的原始数组,srcPos为为原始数组中将要拷贝的数组元素的起始位原始数组中将要

16、拷贝的数组元素的起始位置,置,dest为目标数组,为目标数组,destPos为拷贝到目为拷贝到目标数组中后放置数组元素的起始位置,标数组中后放置数组元素的起始位置,length为拷贝的数组元素数目。为拷贝的数组元素数目。int arraySrc = 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个元素的一维数组的

18、下个元素的一维数组的下标范围在标范围在0.n-10.n-1之间,所以,在程序实现中,需之间,所以,在程序实现中,需要将候选人的编号与数组元素的下标做一个映射,要将候选人的编号与数组元素的下标做一个映射,即即1 1号候选人在数组中用下标号候选人在数组中用下标0 0表示,表示,2 2号候选人在号候选人在数组中用下标数组中用下标1 1表示,依此类推,表示,依此类推,n n号候选人在数组号候选人在数组中用下标中用下标n-1n-1表示。表示。 在在JavaJava语言中,一维数组的元素可以属语言中,一维数组的元素可以属于任意类型,包括基本数据类型和引用于任意类型,包括基本数据类型和引用数据类型。也就是说

19、,一维数组的元素数据类型。也就是说,一维数组的元素又可以是一维数组类型,这就支持了二又可以是一维数组类型,这就支持了二维数组,乃至多维数组的概念。由于可维数组,乃至多维数组的概念。由于可以借助于二维数组表示具有二维关系的以借助于二维数组表示具有二维关系的数据,所以它的应用十分广泛。数据,所以它的应用十分广泛。 3.1.2 3.1.2 二维数组二维数组1. 1. 二维数组的定义与创建二维数组的定义与创建 JavaJava语言规定,二维数组的定义格式为:语言规定,二维数组的定义格式为: 数组元素类型数组元素类型 数组型变量名数组型变量名; ; 或者或者 数组元素类型数组元素类型 数组型变量名数组型

20、变量名 ; ; 或者或者 数组元素类型数组元素类型 数组型变量名数组型变量名 ; ; “数组元素类型为二维数组的元素类型,数组元素类型为二维数组的元素类型, “数组型变量名为二维数组型变量名称。数组型变量名为二维数组型变量名称。 int intArray; float floatArray ; double doubleArray ; 在这在这3种定义格式中,建议使用第一种格种定义格式中,建议使用第一种格式。第二种格式完全是为了尊重那些习惯式。第二种格式完全是为了尊重那些习惯使用使用C/C+定义格式的人们而保留的,第定义格式的人们而保留的,第三种格式清晰度较差,不提倡使用。三种格式清晰度较差,

21、不提倡使用。 创建二维数组的格式为:创建二维数组的格式为: new 数组元素类型数组元素类型行数行数列数列数; 其中,其中,“数组元素类型为二维数组元数组元素类型为二维数组元素的类型素的类型, “行数与行数与“列数表明了陈列数表明了陈列在行方向与列方向的元素数量。列在行方向与列方向的元素数量。 例如,例如, intArray = new int105; floatArray = new float34;int intArray = new int105;等价于:等价于:intArray = new int10;for (int i = 0; i 10; i+) intArrayi = new

22、int5;每行元素个数不同每行元素个数不同floatArray = new float5 ;for (int i = 0; i 5; i+) floatArrayi = new floati+1;2. 2. 二维数组的初始化二维数组的初始化 int intArray=1,2,3,4, 5,6,7,8, 9, 10, 11,12; 执行效果:首先创建二维数组,然后,将第执行效果:首先创建二维数组,然后,将第1个括个括号中的号中的3个数值分别赋给第个数值分别赋给第1行的行的3个元素;再将第个元素;再将第2个括号中的个括号中的3个数值分别赋给第个数值分别赋给第2行的行的3个元素;个元素;最后将第最后

23、将第3个括号中的个括号中的3个数值分别赋给第个数值分别赋给第3行的行的3个元素。初始化后的数组元素状态为:个元素。初始化后的数组元素状态为:3. 3. 二维数组元素的访问二维数组元素的访问 创建二维数组之后,可以通过引用型的二维数组创建二维数组之后,可以通过引用型的二维数组变量对数组元素进行操作了。二维数组必须用两变量对数组元素进行操作了。二维数组必须用两个下标惟一地确定元素,第一个下标为行下标,个下标惟一地确定元素,第一个下标为行下标,第二个下标为列下标,下标的起始编号从第二个下标为列下标,下标的起始编号从0 0开始。开始。 int intArray = new int54; int int

24、Array = new int54; 举例:利用二维数组表示矩阵,并实现两举例:利用二维数组表示矩阵,并实现两个矩阵相乘的操作。个矩阵相乘的操作。 矩阵可以用来表示统计数据等方面的各种矩阵可以用来表示统计数据等方面的各种有关联的数据。在数学上有关联的数据。在数学上, ,矩阵可以是由方矩阵可以是由方程组的系数及常数构成的方阵。下面给出程组的系数及常数构成的方阵。下面给出一个方程组与之对应的矩阵表示。一个方程组与之对应的矩阵表示。 在矩阵的运算中,要求两个相乘的矩阵在矩阵的运算中,要求两个相乘的矩阵必须满足第必须满足第1 1个矩阵的列数等于第个矩阵的列数等于第2 2个矩个矩阵的行数。即对于阵的行数

25、。即对于 Am1 Am1n1n1和和Bm2Bm2n2,n2,要求要求n1=m2n1=m2,且结果矩阵,且结果矩阵C C的行列数为的行列数为m1m1n2n2,其中的每个元素内容为,其中的每个元素内容为 bacjknkkiji,11,public static void enterMatrix(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 p

26、rintMatrix(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,mij); System.out.println(); System.out.println(); public static void MulMatrix(int a, int row1, int col1, int b, int row2, int col2, int c) / 两个矩阵相乘两个矩阵相乘

27、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; 举例:编写一个举例:编写一个Java程序,将程序,将NN的方的方阵转圈赋值,并显示输出。阵转圈赋值,并显示输出。 public static void rotating(int m, int num) / 向方阵中填写数值向方阵中填写数值 int k = 1; / 将要填写的数值将要填写的数值 for (int i = 0; i = num / 2; i+) / 将要填写的圈

28、数将要填写的圈数 for (int j = i; j num - i; j+) / 上方行方向上方行方向 mij = k+; for (int j = i + 1; j = i; j-) / 下方行方向下方行方向 mnum - i - 1j = k+; for (int j = num - i - 2; j i; j-) / 左侧列方向左侧列方向 mji = k+; 3.2 3.2 字符串与字符串与StringString类类l在在Java语言中提供了两种字符串:语言中提供了两种字符串:l一类是一类是String标准类实现的字符串常量;标准类实现的字符串常量;l另一类是另一类是StringBu

29、ffer标准类实现的可编标准类实现的可编辑修改的字符串。辑修改的字符串。 l与与C语言一样,语言一样,Java语言中的字符串直接语言中的字符串直接量使用双引号将字符序列括在其中。量使用双引号将字符序列括在其中。lthis is a string literal!l这样书写的直接量将属于这样书写的直接量将属于String类。类。 除了直接书写字符串直接量以外,还可除了直接书写字符串直接量以外,还可以将某个字符串存储在以将某个字符串存储在StringString的类对象的类对象中。由于中。由于StringString类提供了很多对字符串类提供了很多对字符串常量操作的成员方法,所以,这样做既常量操作

30、的成员方法,所以,这样做既便于字符串的重复利用,又可以提高应便于字符串的重复利用,又可以提高应用字符串的控制能力。用字符串的控制能力。 String类被定义在类被定义在java.lang包中。包中。 使用使用String类表示字符串需要经过定义、类表示字符串需要经过定义、创建、初始化和访问几个阶段。创建、初始化和访问几个阶段。 定义一个定义一个String类对象的语法格式为:类对象的语法格式为: String 字符串变量名字符串变量名; 其中,其中,String为类名,为类名, “字符串变量名为对象名。字符串变量名为对象名。 需要注意,这里定义的字符串对象只是需要注意,这里定义的字符串对象只是

31、一个引用型变量,需要按照下列格式创一个引用型变量,需要按照下列格式创建及初始化对象。建及初始化对象。 字符串变量名字符串变量名 = 字符串值字符串值; 或或 字符串变量名字符串变量名 = new String(字符串值字符串值); “字符串变量名为引用型的字符串变量名为引用型的String类类对象,对象,“字符串值为字符串直接量或字符串值为字符串直接量或另外一个引用型的另外一个引用型的String类对象。类对象。 String str1, str2, str3;str1 = This is a string; str2 = new String(This is a string); str3

32、= str1; 在使用在使用Sting类对象时需要注意几点:类对象时需要注意几点:在在Java语言中,字符串直接量中的每个字语言中,字符串直接量中的每个字符使用符使用Unicode编码,占用两个字节。编码,占用两个字节。如果定义如果定义String类对象之后,没有引用任类对象之后,没有引用任何一个字符串,就应该赋予何一个字符串,就应该赋予null。String类对象所引用的字符串是常量,不类对象所引用的字符串是常量,不能对其字符串内容进行修改。能对其字符串内容进行修改。String类提供了很多成员方法,可以通过类提供了很多成员方法,可以通过这些方法更方便、灵活地使用字符串。这些方法更方便、灵活

33、地使用字符串。 举例:判断给定的字符串是否为回文字符串。举例:判断给定的字符串是否为回文字符串。 所谓回文字符串是指将字符串逆置后与原字符所谓回文字符串是指将字符串逆置后与原字符串相同。例如,串相同。例如,“ABCDCBA“ABCDCBA逆置后还是逆置后还是“ABCDCBA”“ABCDCBA”,这是一个回文字符串;但,这是一个回文字符串;但“Program“Program逆置后为逆置后为“margorP”“margorP”,与原字符,与原字符串不相同,这不是回文字符串。串不相同,这不是回文字符串。 public static boolean isPalindrome(String str) /

34、判断判断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 true; 3.3 3.3 数组操作与数组操作与ArraysArrays类应用类应用 Arrays是是Java类库提供的一个位于类库提供的一个位于java.util包中的标准类,其中包含了许

35、多包中的标准类,其中包含了许多静态成员方法,通过它们可以方便地对静态成员方法,通过它们可以方便地对数组进行排序、比较与填充等一系列操数组进行排序、比较与填充等一系列操作,由于这些成员方法都是经过精心设作,由于这些成员方法都是经过精心设计、严格检测,所以,这样不但可以大计、严格检测,所以,这样不但可以大大地减轻程序设计人员的负担,还可以大地减轻程序设计人员的负担,还可以提高程序的质量、增加程序的清晰度与提高程序的质量、增加程序的清晰度与优化程序的执行效率。优化程序的执行效率。 3.4 3.4 综合应用举例综合应用举例 举例:随机产生若干个整数,并采用选择排序举例:随机产生若干个整数,并采用选择排

36、序的算法,按照非递减顺序重新进行排列。的算法,按照非递减顺序重新进行排列。 问题分析:这是一的典型的一维数组问题。为问题分析:这是一的典型的一维数组问题。为了展示一维数组的操作方式,在这个实例中,了展示一维数组的操作方式,在这个实例中,自定义选择排序的成员方法。自定义选择排序的成员方法。 设计说明:设计三个成员方法,一个用于生成设计说明:设计三个成员方法,一个用于生成一维数组的内容;一个用于显示一维数组的内一维数组的内容;一个用于显示一维数组的内容;另一个用于实现选择排序算法。容;另一个用于实现选择排序算法。 由于在排序过程中,随时需要查看或操作每个由于在排序过程中,随时需要查看或操作每个整数

37、,所以,利用一维数组将参加排序的所有整数,所以,利用一维数组将参加排序的所有整数保存起来是一种最直接且简易的方法。整数保存起来是一种最直接且简易的方法。 public static void sort(int data) / 选择排序选择排序 int index; for (int i = 0; i data.length - 1; i+) / 执行执行n-1趟选择操作趟选择操作 index = i; for (int j = i + 1; j dataindex) index = j; if (index != i) / 将最小数交换到第将最小数交换到第i个位置个位置 int temp = datai; datai = dataindex; dataindex = temp; 举例:打印举例:打

温馨提示

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

评论

0/150

提交评论