JAVA应用基础第五章数组字符串和向量.ppt_第1页
JAVA应用基础第五章数组字符串和向量.ppt_第2页
JAVA应用基础第五章数组字符串和向量.ppt_第3页
JAVA应用基础第五章数组字符串和向量.ppt_第4页
JAVA应用基础第五章数组字符串和向量.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

第5章数组、字符串、向量,2,主要内容,5.1数组一维数组二维数组5.2字符串字符串常量String类StringBuffer类StringTokenizer类5.3向量,3,5.1数组,数组是有序数据的集合,是由数目固定、相同类型的元素组成的,用一个统一的数组名和下标来唯一地确定数组中的元素。Java将数组作为对象来处理,数组是一种引用类型,从java.lang.Object继承而来,故Object类中的所有方法均可用。,4,5.1.1一维数组,具有一个下标的数组称为一维数组。1.一维数组的声明其声明格式如下:这里只有数组变量的定义,没有为数组元素分配空间,只为数组的引用分配了空间,array1和array2目前为空的引用。,方式一:数据类型数组名;方式二:数据类型数组名;例如:intarray1;doublearray2;,5,2.一维数组的初始化,一维数组定义之后,必须经过初始化才可以引用,数组经过初始化后,其长度(即可存放的元素个数)就不可再改变。数组的初始化分为静态初始化和动态初始化两种:(1)静态初始化:在定义数组的同时对数组元素进行初始化intintArray=1,2,3,4;/定义了一个含有4个元素的int型数组注意:在给数组赋初值时,不能同时指定数组的大小,Java会根据初值的多少自动计算数组的大小。静态初始化必须使用上述一条语句完成当创建数组后,如果没有初始化,系统会根据数组的不同数据类型,指定不同的缺省值。,6,(2)动态初始化:用运算符new为数组分配空间对于简单类型的数组,其格式如下:数据类型数组名=new数据类型arraySize;数据类型数组名=new数据类型arraySize;其中arraySize表示数组长度,通常为整型常量,用以指明数组元素的个数。或先声明数组,再对数组进行初始化:数据类型数组名;数组名=new数据类型arraySize;,7,对于复合(引用)类型(类、接口、数组)的数组,需要经过以下两步进行内存空间的分配。首先:为数组分配空间,每一个数组元素都是一个引用,格式为:数组名=new数据类型arraySize;然后为每一个数组元素分配所引用的对象空间,格式为:数组名i=new数组元素对象的构造函数;例如:StringstringArray;/定义一个String类型的数组stringArray=newString3;上述语句给数组stringArray分配3个引用空间,初始化每个引用值为nullstringArray0=newString(how);stringArray1=newString(are);stringArray2=newString(“you”);(如图示),8,9,3.一维数组元素的的引用,当数组初始化后就可通过数组名与下标来引用数组中的每一个元素。一维数组元素的引用格式如下:数组名int类型的表达式注意:(1)与C/C+不同的是,Java对数组元素的下标要进行越界检查,以保证访问的安全性。若数组下标越界,Java会抛出java.lang.ArrayIndexOutOfBoundsException异常。(2)length是属于数组对象的数据域而不是方法。因此,使用length()会出错,length只有在数组创建后才能访问。创建前,数组的引用是null。,10,4.数组的复制,一个简单的赋值语句并不能完成数组复制工作,在Java中,可以使用赋值语句复制基本类型的变量却不能复制对象,如数组。将一个对象赋值给另一个对象,只会使两个对象指向相同的内存地址。赋值数组有以下三种方法:(1)用循环语句复制数组的每一个元素,如for(inti=0;isourceArray.length;i+)targetArrayi=sourceArrayi;(2)使用Object的clone方法,如:inttargetArray=(int)sourceArray.clone();(3)使用System类中的静态方法arraycopy,arraycopy的语法如下:arraycopy(sourceArray,srcpos,targetArray,tarpos,length);,11,5.程序举例,【例5.2】用数组求解Fibonacci数列的前20项,即使用数组下标表达式求解数学上的迭代问题。【例5.3】用冒泡法和选择法两种方法对N个数排序(升序)。,12,图5.2对5个数据进行冒泡法排序,13,练习:,读入6个整数,找出其中最大的,并且统计它的出现次数.,14,5.1.2二维数组,如果数组的元素类型也是数组,这种结构就是多维数组。多维数组的维数没有限制,可以为二维、三维等。最常用的二维数组是一个特殊的一维数组,它的每个元素都是一个一维数组,又叫做数组的数组。表示矩阵或表格需要使用二维数组。1.二维数组的声明,数据类型数组名;或数据类型数组名;例如:intarr;或intarr;,15,2.二维数组的初始化,二维数组的初始化也分为静态初始化和动态初始化两种。(1)静态初始化:在定义数组的同时为数组分配空间,例如:intintArray=1,2,2,3,3,4;(2)动态初始化:对高维数组来说,动态分配内存空间有下面两种方法:直接为每一维分配空间,格式如下:(举例说明)数据类型数组名=new数据类型数组长度;或数据类型数组名=new数据类型数组长度数组长度;,16,例如:intintArray1=newint4;intintArray2=newint43;/*定义了一个二维数组intArray2,分配了12个存储单元,类似一个4行3列的矩阵。*/需要注意的是不指定行数而指定列数是错误的。例如,下面的初始化是错误的。intarr=newint4;/错误,17,从最高维开始(而且必须从最高维开始),分别为每一维分配空间。在这种情况下,第2维的每一个数组的长度可以不同,是一个不规则的二维数组。不规则的数组可以节省存储空间。例如:Strings=newString2;s0=newString2;s1=newString3;s00=newString(Good);s01=newString(Luck);s10=newString(to);s11=newString(you);s12=newString(!);,18,3.二维数组的引用,对二维数组中的每个元素,引用方式为:数组名index1index2其中index1和index2是数组下标,为整型常数和整型表达式,都是从0开始的。二维数组也有length属性,可以求每一维数组的长度。对于:intx=newint34;,19,【例5.5】测定数组的长度及数组赋值。,publicclasstwoDimensionArraypublicstaticvoidmain(Stringarg)intmatrix=1,2,3,4,5,2,3,4,5,3,4,5,4,5,5;System.out.println(thelengthofmatrixis+matrix.length);for(inti=0;i5;i+)System.out.println(thelengthofmatrix+i+is+matrixi.length);,20,【例5.6】求二维数组中的最大数。【例5.7】矩阵的加法和乘法运算。,21,5.2字符串,字符串是多个字符的序列,是编程中常用的数据类型。在纯面向对象的Java语言中,将字符串数据类型封装为字符串类,无论是字符串常量还是字符串变量,都是用类的对象来实现的,在对象中封装了一系列方法来进行字符串处理。,22,5.2.1字符串常量,一个字符串常量使用双引号括住的一串字符,字符常量是用单引号括住的一个字符。一个字符串常量是一个String对象,故可以使用String类中的各种方法。注意:若Java程序中多处出现字符串常量如ABC,则Java编译程序只创建一个String对象,所有的字符串常量ABC将使用同一个String对象。如:Strings1=ABC;Strings2=ABC;Strings3=newString(ABC);上述三条语句创建了三个对象,其中s1和s2是同一个对象,而s1和s3是2个不同的对象,尽管它们所表示的字符序列相等。,23,5.2.2String类,1.String类的构造方法String类中提供了多种构造方法来创建String类的对象。(1)publicString();功能:创建一个字符串对象,其字符串值为空。(2)publicString(Stringvalue);功能:用字符串对象value创建一个新的字符串对象。(3)publicString(charvalue);用字符数组value来创建字符串对象。(4)publicString(charvalue,intoffset,intcount)从字符数组value中下标为offset的字符开始,创建有count个字符的字符串对象。,24,(5)publicString(byteascII)用byte型字符串数组ascII,按缺省的字符编码方案创建字符串对象。(6)publicString(byteascII,intoffsetintcount)从字节型数组ascII中下标为offset的字符开始,按缺省的字符编码方案创建count个字符的串对象。(7)publicString(StringBufferbuffer)用缓冲字符串buffer创建一个字符串对象。【例5.8】String类的构造方法的使用。,25,2.String类的常用成员方法,创建一个String类的对象后,使用相应类的成员方法对创建的对象进行处理。String类的常用成员方法见表5.3。说明:(1)关于字符串比较的说明不能用“=”,而用equals()方法。(2)程序设计中频繁使用字符串。(3)类型转换String类的静态方法valueOf()实现简单数据转化为字符串。类Integer、Double、Float和Long中也提供了方法valueOf()把一个字符串转化为对应的数字对象类型示例:参看例5.10,26,5.2.3StringBuffer类,StringBuffer类也是java.lang.Object的子类。与String类不同,StringBuffer类是一个在操作中可以更改其内容的字符串类。即一旦创建StringBuffer类的对象,在操作中可以更改和变动字符串的内容。也就是说对于StringBuffer类的对象不仅能进行查找和比较等操作,也可以做添加、插入、修改之类的操作。,27,1.StringBuffer类的构造函数,StringBuffer类提供了多种构造方法来创建类StringBuffer的对象。(1)publicStringBuffer()功能:创建一个空字符串缓冲区,默认初始长度为16个字符。(2)publicStringBuffer(intlength)功能:用length指定的初始长度创建一个空字符串缓冲区(3)publicStringBuffer(Stringstr)功能:用指定的字符串str创建一个字符串缓冲区,其长度为str的长度再加16个字符。,28,2.StringBuffer类中追加和插入新内容,StringBuffer类提供了10个重载方法append,可以在字符串缓冲区末尾追加boolean、char、字符数组、double、float、int、long、string、Object等类型的新内容,append方法的返回类型均为StringBuffer。StringBuffer类还提供了9个重载方法insert,可以在字符串缓冲区中指定位置处插入char、字符数组、double、float、int、long、boolean、string、Object等类型的新内容。insert方法的返回类型均为StringBuffer。【例5.11】将给定不同数据类型的内容添加到当前字符串后面。,29,3.StringBuffer类的常用成员方法,java.lang.StringBuffer常用成员方法参见表5.4。【例5.12】测试字符串缓冲区的长度和容量。,30,5.2.4StringTokenizer类,在Java类库的java.util包中包含一个用于进行字符串词法分析的类StringTokenizer,目的是将对字符串进行分解的方法进行封装,以简化应用程序设计过程中的工作量。1StringTokenizer类的构造方法(1)publicStringTokenizer(Stringstr)(2)publicStringTokenizer(Stringstr,Stringdelim)(3)publicStringTokenizer(Stringstr,Stringdelim,booleanreturnTokens),31,2StringTokenizer类的常用成员方法(1)publicintcountTokens()功能:返回字符串中的当前单词的数量,为整数。(2)publicbooleanhasMoreTokens()功能:若还有子串,则返回true,否则返回false。(3)publicStringnextToken()功能:返回下一个子串。(4)publicStringnextToken(Stringdelim)功能:重置delim中的分隔符后,返回串中下一个子串。,32,3.程序设计举例【例5.13】测试StringTokenizer类。,33,5.3向量,Java中的数组只能保存固定数目的元素,且必须把所有需要的内存单元一次性的

温馨提示

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

评论

0/150

提交评论