Java语言程序设计(自考)课件 第五章 数组和字符串_第1页
Java语言程序设计(自考)课件 第五章 数组和字符串_第2页
Java语言程序设计(自考)课件 第五章 数组和字符串_第3页
Java语言程序设计(自考)课件 第五章 数组和字符串_第4页
Java语言程序设计(自考)课件 第五章 数组和字符串_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第五章数组和字符串

学习目标理解数组的概念,能够声明一维数组和二维数组,能够使用静态和动态两种方式初始化数组元素。能够编写访问数组元素的程序理解字符串的概念,能够定义字符串,并进行初始化。能进行字符串与基本数据类型之间的转换,能使用String类和StringBuffer类中的方法对字符串进行相关的操作理解向量的概念,掌握向量的定义及使用方法,能正确完成向量元素的添加、删除、修改及查找等操作本章主要内容数组12Vector类3字符串类型第一节数组数组声明数组是相同数据类型的元素按一定顺序排列的数据序列数组是一系列的匿名变量,数组中的元素可通过下标来访问在Java中,数组是对象。类Object中定义的方法都可以用于数组对象。可以说明任何类型的数组,基本类型,类类型,数组等。数组在使用之前必须先说明一维数组的定义类型

数组名[];

变量名后接方括号;将方括号放到变量名的左面。如下所示:

chars[];

intintArray[];

DatedateArray[];

Pointpoints[];类型[]数组名;创建数组

静态初始化和动态初始化

静态初始化就是在定义数组的同时对数组元素进行初始化

静态初始化可用于任何元素类型,初值块中每个位置的每个元素对应一个引用。动态初始化是使用运算符new为数组分配空间。数组说明的方括号中的数字表示数组元素个数静态初始化intintArray[]={1,2,3,4};int[]ages={34,12,45};double[]heights={84.124,78.2,61.5};boolean[]tired={true,false,false,true};String[]names={“Zhang",“Li",“Wang"};动态初始化类型数组名[]=new类型[数组大小];类型[]数组名=new类型[数组大小];s=newchar[20];类类型的数组

类类型的数组需要经过两步进行空间分配

使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化

第一步先创建数组本身:typearrayName[]=newtype[arraySize];

第二步分别创建各个数组元素: arrayName[0]=newtype(paramList); … arrayName[arraySize-1]=newtype(paramList);类类型的数组points=newPoint[100];

points[0]=newPoint();

points[1]=newPoint();

points[99]=newPoint();

stringstringArrar[];stringArray=newString[3];stringArray[0]=newString(“how”);stringArray[1]=newString(“are”);Java中没有静态的数组定义,内存都是通过new动态分配的。错误的定义:intintArray[5];数组说明与创建关系

Point类

classPoint{ intx,y; Point(intx1,inty1){ x=x1; y=y1; } Point(){ this(0,0); }}数组说明与创建关系points(a)pointslength:100…(b)points…length:100X:Y:(c)Point[]points;执行完毕,系统为变量points分配一个引用空间points=newPoint[100];执行完毕,系统在内存中分配一个数组对象并把数组引用赋给变量pointspoints[1]=newPoint();

数组说明注意数组变量的类型可以指向它的父类正确错误Object[]points;points=newPoint[100];Point[]points;points=newObject[100];数组边界

数组下标从0开始,元素个数length是数组类中唯一的数据成员变量

new创建数组时系统自动给length赋值数组一旦创建完毕,其大小就固定下来程序运行时可以使用length进行数组边界检查。如果发生越界访问,则抛出一个异常访问数组元素intlist[]=newint[10];

for(inti=0;i<list.length;i++){

//进行相应处理的代码

}循环的结束条件中使用list.length,而不是常数10。这样做不会引起数组下标越界,使程序更健壮,修改更方便。数组元素的引用

数组名加上下标,引用方式为:index为数组下标,下标从0开始,一直到length-1下标是整型常数或表达式程序5.1设给定一组整型数,求它们的平均值及最大值arrayName[index]

arrayName[1],arrayName[i],arrayName[6*i]多维数组多维数组的定义Java中没有真正的多维数组,可以建立数组的数组(的数组……),由此得到多维数组n维数组是n-1维数组的数组说明多维数组时使用类型及多对方括号二维数组二维数组的定义方式:与一维数组一样,定义对数组元素也没有分配内存空间,要使用运算符new来分配内存,然后才可以访问每个元素类型数组名[][];类型[][]数组名;类型[]数组名[];多维数组的初始化静态初始化在定义数组的同时为数组分配空间动态初始化直接为每一维分配空间从最高维起(而且必须从最高维开始),分别为每一维分配内存intintArray[][]={{2,3},{1,5},{3,4}};

数组intArray为一个3行2列的数组,它的形式如下:

23 15 34类型数组名[][]=new类型[数组第1维大小][];数组名[0]=new类型[数组第2维大小];数组名[1]=new类型[数组第2维大小];......数组名[数组第一维大小-1]=new类型[数组第2维大小];类型数组名[][]=new类型[数组第一维大小][数组第二维大小]例如:inta[][]=newint[2][3];

二维数组例一inttwoDim[][]=newint[4][]; twoDim[0]=newint[5];twoDim[1]=newint[5];二维数组例二Strings[][]=newString[2][];s[0]=newString[2];s[1]=newString[3];s[0][0]=newString(“Good”);s[0][1]=newString(“Luck”);s[1][0]=newString(“to”);s[1][1]=newString(“you”);s[1][2]=newString(“!”);非矩阵数组inttwoDim[][]=newint[4][];

twoDim[0]=newint[2];

twoDim[1]=newint[4];

twoDim[2]=newint[6];

twoDim[3]=newint[8];XXXXXXXXXXXX

XXXXXXXXtwoDim数组为4行,每行的元素个数分别为2,4,6,8个矩阵数组二维矩阵数组的一般说明格式为:arrayName是数组名,length1和length2分别为数组各维的大小,type是数组元素的类型。

类型数组名[][]=new类型[数组第一维大小][数组第二维大小]二维矩阵数组intmatrix[][]=newint[4][5];将创建一个有4个一维数组的数组,每个一维数组中又有5个整数,即4行5列的整数矩阵。该行等价于下列这段代码:intmatrix[][]=newint[4][];for(intj=0;j<matrix.length;j++) matrix[j]=newint[5];多维数组说明正确的声明:inta1[][]=newint[2][3];inta2[][]=newint[2][];int[]a3[]=newint[4][6];错误的说明:interrarr1[2][3];interrarr2[][]=newint[][4];interrarr3[][4]=newint[3][4];不允许说明静态数组

说明顺序应从高维到低维

数组维数的指定只能出现在new运算符之后

多维数组的引用

二维数组引用方式为:数组名[第1维下标][第2维下标]例如:

intmyTable[][]=newint[4][3];

myTable[0][0]=34;

myTable[0][1]=15;

myTable[0][2]=26;多维数组的引用例intmyTable[][]={ {23,45,65,34,21,67,78}, {46,14,18,46,98,63,88}, {98,81,64,90,21,14,23}, {54,43,55,76,22,43,33}};for(introw=0;row<4;row++){ for(intcol=0;col<7;col++) System.out.print(myTable[row][col]+""); System.out.println();}0123456023456534216778146141846986388298816490211423354435576224333多维数组的引用例计算表中各行元素之和并查找其值最大的那个行程序5.2

结果:Row2hastheMAXsumof391length属性

多维数组的length属性只返回第一维的长度

intages[4][7];ages.length; //返回4,而不是28

可以分别存取每一维的长度,如:

int[][]ages=intages[4][7]; int[]firstArray=ages[0]; ages.length*firstArray.length; //返回28数组复制

Java方法arraycopy()

//程序5.3classArrayTest{publicstaticvoidmain(Stringargs[]){ intelements[]={1,2,3,4,5,6}; inthold[]={10,9,8,7,6,5,4,3,2,1}; System.arraycopy(elements,1,hold,2,4); }}第二节字符串类型

字符串

内存中连续排列的一个或多个字符String

处理不变字符串StringBuffer处理可变字符串字符串的声明字符串常量系统为程序中出现的字符串常量自动创建一个String对象

字符串变量

System.out.println(“ThisisaString”);将创建“ThisisaString”对象Strings1;StringBuffersb1;Strings1=newString();charchars[]={'a','b','c'};Strings2=newString(chars);Strings3="HelloWorld!";

字符串处理String类length()

返回字符串中的字符个数charAt(intindex)

返回字符串中index位置的字符toLowerCase()

将当前字符串中所有字符转换为小写形式字符串处理String类toUpperCase()将当前字符串中所有字符转换为大写形式subString(intbeginIndex)

当前字符串中从beginIndex开始到末尾的子串replace(charoldChar,charnewChar)

将当前字符串中出现的所有oldChar转换为newChar程序5.4结果:beforechanged,s=ThisisatestString!afterchanged,s=ThisisatestString!t=thisisateststring!s.length=22strb.length=22s3.replace=ThisisotestString!strb.replace=ThatisatestString!strb.capacity=38字符串处理例StringBuffer类修改一个StringBuffer类的字符串时,不用再创建一个新的字符串对象,而是直接操作原字符串分配内存时,除去字符所占空间外,再另加16个字符大小的缓冲区StringBuffer的长度是指存储在其中的字符个数,容量是指缓冲所能容纳的最大字符数String类对象使用concat(Stringstr)方法将str连接在当前字符串的尾部

重载运算符“+”StringBuffer类对象使用append()方法实现连接

Strings=newStringBuffer("Heis").append(age).append("yearsold.").toString();连接Strings="Heis"+age+"yearsold.";

Strings="Thisisthe";Stringt=s.concat("String.");t的内容为:"ThisistheString."比较

可用方法使用关系运算符“==”

与equals()方法不同的是,“==”判定两字符串对象是否是同一实例,即它们在内存中的存储空间是否相同

compareTo()、equals()、equalsIgnoreCase()、regionMatches()比较例子程序5.5第三节Vector类对应于类似数组的顺序存储的数据结构,允许不同类型的元素共存于一个变长数组中,可以看作是把不同类型元素按照动态数组进行处理可以看作是一个可变大小的数组

用一个整数类型的次序值来访问

增加或删除了元素,大小也变大或变小

概述

适合情况需要处理的对象数目不定,序列中的元素都是对象或可以表示为对象;需要将不同类的对象组合成一个数据序列;需要做频繁的对象序列中元素的插入和删除;经常需要定位序列中的对象和其他查找操作;在不同的类之间传递大量的数据;

Vector类addElement(Objectobj):将新元素obj添加到序列尾部。insertElementAt(Objectobj,intindex):将指定对象obj插入到指定位置index处。add(intindex,Objectobj):在向量的指定位置index插入指定的元素obj。removeAllElements():清除向量序列中的所有元素,同时向量的大小置为0。Vector类setElementAt(Objectobj,intindex):将向量序列index位置处的对象元素修改为obj。如果下标index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException。removeElement(Objectobj):删除向量序列中第一个与指定的obj对象相同的元素,同时将后面的所有元素均前移一个位置。这个方法返回的是一个布尔值,表示删除操作成功与否。removeElementAt(intindex):删除index位置的元素,同时将后面的所有元素均前移一个位置。如果下标index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException。Vector类elementAt(intindex):返回指定位置处的元素。如果下标index是负数或超出实际元素的个数,则抛出异常ArrayIndexOutOfBoundsException。这个方法的返回值是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。contains(Objectobj):检查向量序列中是否包含指定的对象元素obj。indexOf(Objectobj,intstart_index):从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。lastIndexOf(Objectobj,intstart_index):从指定的start_index位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回-1。Vector构造方法publi

温馨提示

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

评论

0/150

提交评论