Java04数组字符串.ppt
Java技术与应用,Java的数组字符串(第4章),西安交大 卫颜俊 2009年4月电子信箱:QQ:610568018网站:,1.数组(Array),数组是一种复合数据类型,代表一组同类型的变量。数组是一种特殊的对象。从存储方式来看,数组所代表的变量按顺序连续存放,数组本身使用一个标识符来定义,称为数组名。所代表的每一个变量称为数组元素,数组元素在内存中所处的位置称为下标。数组的长度是指数组中的元素个数。数组也遵守一般变量的先定义后使用的原则。,数组举例,记录一个班的10名同学的数学成绩定义10个变量:float score1,score2,score10分别存放每个同学的数学成绩定义1个数组变量:score10其中,score.length=10每个元素为:score0,score1,score8,score9数组为scorescorei(i=0,9)类型为float,一维数组,定义格式类型名 数组名=初值;或类型名 数组名=初值;举例:int ai;/定义一个整数数组float score;/定义一个float数组float score;Object ao;/定义一个Object数组String names;/定义一个字符串数组 byte rowvector,colvector,matrix;/分别定义两个字节数组和一个字节数组的数组 MyClassamc;/定义一个带参数的对象数组,一维数组的初始化,数组的定义中并不为数组元素分配内存静态初始化使用一对大括弧“”加数据来对数组进行初始化 举例:int ai=1,2,3,4,5,6,7,8,9,10;/数组ai有10个数组元素,即ai.length为10,每个元素类型为int char ac=n,o,t,a,S,t,r,i,n,g;/数组ac有12个数组元素,即ac.length为12,每个元素类型为char String countryNames=中国,美国,法国;/数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String MyClass amc=new MyClass(),new MyClass(),new MyClass();/数组amc有3个数组元素,即amc.length为3,每个元素类型为MyClass Color colorPalette=Color.RED,Color.GREEN,Color.BLUE;/数组colorPalette有3个数组元素,即colorPalette.length为3,每个元素类型为Color,一维数组的初始化(2),动态初始化使用构造对象的方法(new运算符)来初始化数组举例:int ai=new int10;/数组ai有10个数组元素int length=35;float score=new floatlength;/数组score有35个数组元素String countryNames=new String 中国,美国,法国;/数组countryNames有3个数组元素,即countryNames.length为3,每个元素类型为String,一维数组的引用,举例:for(int i=0;i ai.length;i+)System.out.println(aii*aii);,一维数组的完整例子,【例4-1】模拟体育比赛中的胜、平和负3种状态10000次,统计并显示每种状态的次数。(int)(Math.random()*10000)%3【例4-2】查找数组中是否存在某个数值。关键代码:for(int x:arrayOfInts),二维数组,定义格式类型名 数组名=初值;或类型名 数组名=初值;或类型名 数组名=初值;举例:int ai;int ai;int ai;,二维数组的初始化,二维数组的定义中不为数组元素分配内存,分静态初始化和动态初始化举例:1:int ai1=new int33;2:int ai2=3:1,2,3,4,5,6,7,8,94:;5:int ai3=new int3;6:ai30=new int3;7:ai31=new int2;8:ai32=new int1;9:int ai4=10:1,2,3,4,5,611:;12:int ai5=13:1,2,null,3,4,514:;,二维数组的引用,举例:for(int i=0;i ai4.length;i+)for(int j=0;j ai4i.length;j+)System.out.println(ai4ij*ai4ij);,二维数组的完整例子,【例4-4】输出如下所示的杨辉三角形。三角形中的每一行除最左和最右为1之外,中间的每一行每一列的值=上一行当前列的值+上一行前一列的值。,数组与算法,java.util.Arrays类和java.lang.System类中提供了数组的初始化、拷贝、克隆、比较、查找与排序等方法。1.初始化方法:System.fill(a,val);其中,a为要初始化的数组,val为初始化值。2.拷贝方法:Arrays.arraycopy(src,srcPos,dest,destPos,length);其中,src为原始数组,srcPos为原始数组起始下标,dest为目标数组,destPos为目标数组起始下标,length为要拷贝的元素个数。3.克隆方法:a.clone();其中,a为数组,返回值为目标数组。“”表示数组引用,而clone表示复制。,数组与算法(2),4.比较方法:Arrays.equals(a1,a2);其中,a1、a2为要比较的两个数组,“”表示为同一个引用,而equals表示元素相等。5.数组排序方法:Arrays.sort(a);其中,a为待排数组。6.查找方法:Arrays.binarySearch(a,key);其中,a为待查数组,key为查找关键值,返回值为查找到的数组下标,如果未找到,返回-1。7.元素批输出方法:Arrays.toString(a);其中,a为待输出数组,返回值为数组元素构成的字符串。如果直接输出a的话,得到的只是a的内存标识号,而不是所有元素值。,数组举例,【例4-7】数组与算法演示。,数组举例,【例4-14】对一组数据进行分析。原始数据如下表6-1所示:表6-1 W县2003-2006年苹果产量表(单位:万担)要求预测2007年的产量,采用的算法:算术平均:几何平均:增长速度:发展速度:,2.字符串(String、StringBuffer、StringBuilder),字符串是指用一对双引号将若干个字符括起来组成的字符序列。Java语言中的字符串表面上是字符序列,内部却是使用对象来表示的,不能把字符串与字符数组等同起来。包括定长字符串和可变长字符串有时为了提高存取效率,采用定长字符串,使用String类的对象;有时则为了修改的灵活性,采用可变长字符串,使用StringBuffer类的对象。,定长字符串的定义格式,String 变量名=;其中,为由一对双引号()括起来的字符序列。String()构造一个空字符串String(String original)由原始字符串构造新的字符串String(char value)由字符数组构造字符串String(char value,int offset,int count)由字符数组的一部分构造字符串举例:String word=月随碧山转,水合青山流。杳如星河上,但觉云林幽。;String s=new String();String firstName=new String(杰克);char asc=伦,敦String lastname=new String(asc);String name=new String(firstName+lastname);,定长字符串的引用格式,对于字符串文字量可以直接使用,而一旦定义好一个字符串变量,就可以按名存取。String类提供了一个方法length()取得字符串的长度,即它所包含的字符个数。比如上例中的s.length()为0,name.length()为5等。,定长字符串的处理算法,“+”运算符,不但可以将两个字符串拼接,还可以将其它类型的值与字符串拼接,得到一个新的字符串。String类的常用方法,定长字符串举例,【例4-8】定长字符串处理方法综合演示。【例4-9】判断字符串是否为回文。,可变长字符串,举例:对于可变长字符串Dot Saw I,其长度为9,而容量为17。,可变长字符串的定义格式,StringBuffer()构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。StringBuffer(int capacity)构造一个不带字符,但具有指定初始容量的字符串缓冲区。StringBuffer(String str)构造一个字符串缓冲区,并将其初始化为指定的字符串内容。举例:StringBuffer s1=new StringBuffer();StringBuffer s2=new StringBuffer(28);StringBuffer s3=new StringBuffer(地球只有一个,请爱惜她!);,可变长字符串的引用格式,StringBuffer类提供length()方法计算长度,capacity()方法计算容量。,可变长字符串的处理算法,StringBuffer类的常用方法,可变长字符串举例,【例4-10】可变长字符串处理方法综合演示。【例4-11】字符串、字符数组的转换。【例4-12】从字符串中提取单词。,可变长字符串举例,【例4-13】字符串四则运算表达式的计算。算法简述:StringTokenizer类是java.util包中提供的一个解析字符串的类,其方法如下:StringTokenizer(String str,String delim)为指定字符串构造一个StringTokenizer类的对象。其中,str为原始字符串,delim参数中的字符都是起分隔标记作用的分隔符序列。分隔符字符本身不作为标记。boolean hasMoreTokens()测试此标记的字符串中是否还有更多的可用标记。如果此方法返回true,那么后续调用无参数的nextToken方法将成功地返回一个标记。public String nextToken()返回下一个标记。,综合例子,【例4-15】给定一篇英文,要求完成以下功能:(1)显示所有汉字符号;(2)将字母转换为大写;(3)去掉非字母符号;(4)统计各个字母出现的次数(不区分大小写);(5)每个字母只保留一个。,本讲结束!,谢谢!,