数组与字符串处理.ppt_第1页
数组与字符串处理.ppt_第2页
数组与字符串处理.ppt_第3页
数组与字符串处理.ppt_第4页
数组与字符串处理.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第4章数组与字符串处理,学习目标:数组的基本概念一维和二维(多维)数组的创建与引用数组的常用操作以及应用举例String类字符串操作常用方法命令行参数,4.1数组,4.1.1数组的基本概念问题的引入了解什么是数组以及数组的作用。了解数组前需了解的内存分配的一些背后知识栈内存和堆内存。,数组是多个相同类型的数据的组合,实现对这些数据的统一管理,数组中的每一个数据也叫数组的一个元素。数组的定义:数据类型数组名;数组的创建:数组名=new数据类型数组长度解释下面这句代码的语法:intx=newint100;,因此,也可以将这一行代码分成两行来写:intx;/定义了一个数组x,x=newint100;/数组初始化;内存状态分别如下:,也可以改变x的值,让它指向另外一个数组对象,或者不指向任何数组对象。要想让x不指向任何数组对象,只需要将常量null赋值给x。如:x=null;,这条语句执行完后的内存状态如图:,在java中,还可以用下面的方式定义数组:intx;/方括号()位于变量名之前x=newint100;,4.1.2数组的静态初始化可以在定义数组的同时就为数组元素分配空间并赋值,也就是对数组的静态初始化。如:intia=1,2,3,4;等号右边相当于产生了一个数组对象,该数组有4个元素变量,这4个变量的取值分别是整数1、2、3、4。数组的长度等于右边中的元素的个数。,有时也能见到下面定义数组的方式:intia=newint3,4,5;注意:在java语言中声明数组时,无论用何种方式定义数组,都不能指定其长度,例如下面的定义将是非法的;inta5;,4.1.3使用数组时要注意的问题必须对数组引用变量赋予一个有效的数组对象(通过new产生或是用静态初始化而产生)后,才可以引用数组中的每个元素。需要注意:如下代码intia=newint1,2,3,4,5;,这行代码中定义了一个ia数组,它里面包含了5个元素,分别是:ia0=1ia1=2ia2=3ia3=4ia4=5也就是说数组的第一个元素是ia0,而不是ia1,最后一个元素是ia4,而不是ia5,如果创建了一个100个元素的数组,并且试图访问元素a100(或任何在099之外的下标),程序就会引发”arrayindexoutofbounds”异常而终止执行。要想获得数组中的元素个数,可以引用array.length。例如:for(inti=0;ia.length;i+)System.out.println(ai);一旦创建了数组,就不能再改变它的大小(当然,尽管可以改变每一个数组元素)。,“foreach”循环,foreach循环是一种功能很强的循环结构,可以用来一次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。这种for循环的语句格式为:for(variable:collection)statement定义一个变量用于暂存集合中的每一个元素,并执行相应的语句。例如:for(intelement:a)System.out.println(element);,4.1.4多维数组在java中并没有真正的多维数组,只有数组的数组。虽然应用上很像C中的多维数组,但还是有区别的。在C中定义一个二维数组,必须是一个x*y二维矩阵块,Java中多维数组不一定是规则矩阵形式,如:定义多维数组:数据类型数组名;数据类型数组名;intxx;,intxx;xx=newint3;xx0=newint3;xx1=newint2;xx0和xx1的长度可以不一样,数组对象中也可以只有一个元素。程序运行到这之后的内存分配情况如图:,如果数组对象正好是一个x*y形式的规则矩阵,则不必像上面的程序一样,先产生高维的数组对象后,再逐一产生低维的数组对象,完全可以用一句代码在产生高维数组对象的同时,产生所有的低维数组对象。intxx=newint23;,内存布局如图:也可以像一维数组一样,在定义数组的同时就为多维数组元素分配空间并赋值,也就是对多维数组的静态初始化。如:intxx=3,2,7,1,5,6;,与一维数组一样,在声明多维数组时不能指定其长度。,4.1.5一些与数组操作相关的函数1.数组拷贝在java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。intluckyNumbers=smallPrimes;luckyNumbers5=12;/nowsmallPrimes5is/also12,如果希望将一个数组的所有值拷贝到另一个数组中去,就要使用System类的arraycopy方法。调用这个方法的语法格式为:System.arraycopy(from,fromIndex,to,toIndex,count);数组to必须有足够的空间来存放拷贝的元素。intsmallPrimes=2,3,5,7,11,13;intluckyNumbers=1001,1002,1003,1004,1005,1006,1007;System.arraycopy(smallPrimes,2,luckyNumbers,3,4);for(inti=0;iluckyNumbers.length;i+)System.out.println(i+“:”+luckyNumbersi);,输出结果为:0:10011:10022:10033:54:75:116:13,2.数组的排序sort()方法属于util包中的Arrays类。使用方法:publicstaticvoidsort(数据类型a)publicstaticvoidsort(数据类型a,intformIndex,inttoIndex)例如,以下程序将产生一个抽奖游戏中的随机数值组合。假如抽奖是“从49个数值中抽取6个”,那么程序可能的输出结果为:478193044,要想选择这样一个随机的数值集合,就要首先将数值1,2,3,n存入数组numbers中:intnumbers=newintn;for(inti=0;inumbers.length;i+)numbersi=i+1;而用第二个数组存放抽取出来的数值:intresult=newintk;现在,就可以开始抽取k个数值了。Math.random方法将返回一个01之间的随机浮点数。用n乘以这个浮点数,就可以得到0n-1之间的一个随机数。intr=(int)(Math.random()*n);下面将result的第i个元素设置为numbersr存放的数值,最初就是r本身。但正如所看到的那样,numbers数值的内容在每一次抽取之后都会发生变化。resulti=numbersr;因为所有抽奖的数值不能一样,所以必须确保不会再次抽取到那个数值。因此,这里使用数组中的最后一个数值改写numberr,并将n减1。,numbersr=numbersn-1;n-;关键在于每次抽取的都是下标,而不是实际的值。下标指向包含尚未抽取过的数组元素。在抽取了k个数值之后,就可以对result数组进行排序了,这样使得输出效果更加清晰:Arrays.sort(result);for(intr:result)System.out.println(r);,4.2Java字符串处理,Java中将字符串作为String类型对象来处理。当创建一个String对象时,被创建的字符串是不能被改变的。每次需要改变字符串时都要创建一个新的String对象来保存新的内容。原始的字符串不变。,4.2.1String构造函数(1)String(),默认构造函数,无参数Strings1=newString();(2)String(charchars),传入字符数组charmyChars=a,b,c;Strings2=newString(myChars)/使用字符串“abc”初始化s2,(3)String(charchars,intstartIndex,intnumChars)、传入一个字符数组,从指定下标位置开始获取指定个数的字符,用这些字符来初始化字符串变量。charmyChars=h,e,l,l,o;Strings3=newString(myChars,1,3);/使用字符串“ell”初始化s3(4)String(StringstrObj),传入另一个字符串对象,用该字符串对象的内容初始化Strings4=newString(s3);/这时s4也是“ell”了。,4.2.2String类字符串操作常用方法1.求字符串的长度publicintlength()2.求字符串某个位置的字符publiccharcharAt(inti)3.连接字符串publicStringconcat(Stringstr),4.查找字符串中的某个字符publicintindexOf(intch);publicintindexOf(intch,intfromIndex)publicintlastIndexOf(intch)publicintlastIndexOf(intch,intfromIndex),5.查找字符串中的子串publicintindexOf(Stringstr)publicintindexOf(Stringstr,intfromIndex)publicintlastIndexOf(Stringstr)publicintlastIndexOf(Stringstr,intfromIndex)获取字符串中的某个字符:publiccharcharAt(intindex),6.比较两个字符串publicintcompareTo(StringanotherString)publicBooleanequals(ObjectanotherObject)publicBooleanequalsIgnoreCase(StringanotherString),4.3命令行参数,前面已经看到多次使用java数组的例子。每一个java应用程序都有一个带Stringargs参数的main方法。这个参数表明main方法将接受一个字符串数组,也就是命令行参数。如:,PublicclassMessagepublicstaticvoidmain(Stringargs)if(args0.equals(“-h”)System.

温馨提示

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

评论

0/150

提交评论