《Java程序设计》课件-javacp4数组和字符串_第1页
《Java程序设计》课件-javacp4数组和字符串_第2页
《Java程序设计》课件-javacp4数组和字符串_第3页
《Java程序设计》课件-javacp4数组和字符串_第4页
《Java程序设计》课件-javacp4数组和字符串_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第四章数组和字符串

Java程序设计本章主要内容

数组字符串小结2024/12/24李飞——计算中心2/30数组的概念数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。这些元素可以是简单类型也可以是对象。在Java中,数组属于构造类型。用法等同于对象。需要声明,分配内存空间和释放内存空间。分配内存空间用new保留字完成,收回内存空间用垃圾回收器自动回收。十二月24李飞计算中心3数组的特点一个数组中所有的元素是同一类型;数组中的元素是有顺序的;数组中的一个元素通过数组名和数组下标来确定。下标从0开始。2024/12/24李飞——东北大学秦皇岛分校计算中心4/35数组涉及的常用名词数组名。数组名应该符合Java语言标识符的命名规则。数组的类型。因为数组是用来存储相同类型的数据,因此数组的类型就是其所存储的元素的数据类型。数组的长度。数组的长度指的是数组中可以容纳的元素的个数,而不是数组所占用的字节数。5十二月24李飞计算中心一维数组存储模型2024/12/24李飞——东北大学秦皇岛分校计算中心6/35一维数组的声明

一维数组声明的格式为:

类型数组名[];或

类型[]数组名;其中类型指出了数组中各元素的数据类型,包括基本类型和构造类型。数组名为一个标识符。“[]”指明了该变量是一个数组类型变量。当[]在数组名后时仅说明一个数组;当[]在数组名前时,后面的数组名列表中的所有标识符都是数组。例如: inta[];等价于 int[]a;例如:inta[],b[];等价于int[]a,b;十二月24李飞计算中心7

一维数组的初始化初始化方式一直接给数组的每个元素赋上一个初始值,系统会自动根据所给的元素个数为数组分配一定的内存空间,一般在数组元素比较少时使用,一般形式为:

类型数组名[]={值1,值2,……,值n};例:声明并初始化一个长度为3的整型数组。

inta[]={1,2,3};十二月24李飞计算中心8

一维数组的初始化初始化方式二使用new操作符为一个数组分配内存空间,然后为每个元素分别赋值,格式如下:

类型数组名[];

数组名=new类型[数组长度];或简化为

类型数组名[]=new类型[数组长度];例:初始化一个具有10个元素的整型数组。inta[];a[]=newint[10];Inta[]=newint[10];十二月24李飞计算中心9一维数组的访问和赋值数组引用的赋值数组本身就是一种对象,因此我们可以把一个数组整体的赋值给另外一个数组。这种情况通常可以在两个相同类型的数组之间完成。char[]a1={'c','h','i','n','a'};char[]b1;b1=a1;数组元素的赋值数组的每个元素2024/12/24李飞——东北大学秦皇岛分校计算中心10/35求最值。例4.6:给定10个数,求其最大值。publicclasseg4_6{ publicstaticvoidmain(String[]args){ int[]a={3,6,4,1,7,8,34,5,32,2}; intmax=a[0]; for(inti=0;i<a.length;i++) if(max<a[i]) max=a[i]; System.out.println("最大值:"+max); }}2024/12/24李飞——东北大学秦皇岛分校计算中心11/35算法:排序给定一个数组,把数组按从大到小排序。擂台法:n各元素的数组,要排n-1轮每轮选出一个最大值放在数组的相应位置冒泡法:n各元素从前到后两两比较,大的在前,小的在后,否则交换。外循环执行i=len轮内循环比较次数len-1十二月24李飞计算中心12/30排序例4.7:给定10个数,按从小到大排序。publicclasseg4_7{ publicstaticvoidmain(String[]args){ int[]a={3,6,4,1,7,8,34,5,32,2}; inttemp; for(inti=0;i<a.length-1;i++) for(intj=i+1;j<a.length;j++) if(a[i]>a[j]){ temp=a[i]; a[i]=a[j]; a[j]=temp; } for(inti=0;i<a.length;i++) System.out.print(a[i]+""); }}2024/12/24李飞——东北大学秦皇岛分校计算中心13/35冒泡法排序2024/12/24李飞——东北大学秦皇岛分校计算中心14/35每执行一轮排序操作,都把数组中的所有元素按顺序两两比较,在比较过程中永远保证大的(或小的)在前,当经过数组长度-1轮比较后,数组的顺序会自动排好。

假设我们有一个数组a,它包含5个元素为{3,2,7,1,6}。采用冒泡法排序的过程冒泡法排序2024/12/24李飞——东北大学秦皇岛分校计算中心15/35例4.8:给定10个数,按从小到大排序。publicclasseg4_71{ publicstaticvoidmain(String[]args){ int[]a={3,6,4,1,7,8,34,5,32,2}; inttemp; for(inti=0;i<a.length-1;i++) for(intj=0;j<a.length-1;j++) if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } for(inti=0;i<a.length;i++) System.out.print(a[i]+""); }}4.1.2二维数组和多维数组

二维数组的存储模型2024/12/24李飞——东北大学秦皇岛分校计算中心16/35二维数组

二维数组的声明格式

类型数组名[][];

类型[][]数组名;直接为每一维分配空间,如inta[][]=newint[2][3];该语句创建了一个二维数组a,其较高一维含两个元素,每个元素为由3个整数构成的整型数组。17十二月24李飞计算中心

二维数组的创建(2)从最高维开始,分别为每一维分配空间,如 intb[][]=newint[2][];

//最高维含2个元素,每个元素为一个整型数组 b[0]=newint[3];

//最高维第一个元素是一个长度为3的整型数组 b[1]=newint[5];//最高维第二个元素是一个长度为5的整型数组18十二月24李飞计算中心(1)直接为每一维分配空间,如inta[][]=newint[2][3];该语句创建了一个二维数组a,其较高一维含两个元素,每个元素为由3个整数构成的整型数组。二维数组的初始化动态初始化:用new在为数组分配空间后,再单独为每个数组元素赋值。inta[][]=newint[2][3]a[0][0]=33静态初始化:直接对每个元素赋值,在声明和定义数组的同事也为数组分配内存空间。inta[][]={{2,3},{1,3},{3,4}};intarr[][]={{3,9},{4,5,3},{4,5,6,7}};//arr.length=3,arr[0].length=2,arr[1].length=3,

arr[2].length=4十二月24李飞计算中心19/30二维数组的访问和赋值

和一维数组一样,二维数组名称也仅表示二维数组的存储空间的引用,所以我们也可以通过赋值语句直接为一个二维数组指定别名。2024/12/24李飞——东北大学秦皇岛分校计算中心20/35例4.9:为二维数组起别名。publicclasseg4_9{ publicstaticvoidmain(String[]args){ inta[][]={{1,2,3},{4,5},{6,7,8,9}}; int[][]b; b=a; for(inti=0;i<a.length;i++){ for(intj=0;j<a[i].length;j++) System.out.print(b[i][j]+""); System.out.println(); } }}二维数组的应用矩阵运算见例4.10表格处理。见例4.112024/12/24李飞——东北大学秦皇岛分校计算中心21/354.2字符串字符串是一系列字符组成的序列。Java在字符处理方面主要有三个相关的类String类、Character类和StringBuffer类。String类:用于处理多个字符组成的字符串。Character类的实例是单个字符,在类中定义了一些可以用于操作和检查单个字符数据的简便方法。StringBuffer类用于存储和操作由多个字符组成的可改变的数据,通常应用在字符串的输入和输出。2024/12/24李飞——东北大学秦皇岛分校计算中心22/35Character类Character类是char数据类型的包装类,它的对象仅包含一个字符。创建Character对象采用new运算符调用其构造方法来实现。Charactera=newCharacter(字符常量);2024/12/24李飞——东北大学秦皇岛分校计算中心23/35Character类的方法2024/12/24李飞——东北大学秦皇岛分校计算中心24/35表4.1Character类的常用成员方法方法说明charValue()求Character对象的字符值hashCode()求字符的ASCII值compareTo(CharacteranotherChar)比较Character和anotherChar的大小。相等返回0;Character对象小于anotherChar返回小于0的值;Character对象大于anotherChar返回大于0的值。equals(Objectobj)比较Character对象和obj是否相等,相等返回true。toString()把Character对象转换为String对象。Character类的方法2024/12/24李飞——东北大学秦皇岛分校计算中心25/35表4.2Character类的常用类方法方法说明isUpperCase(charch)判断ch是否为大写字母,是则返回true。isLowerCase(charch)判断ch是否为小写字母,是则返回true。toUpperCase(charch)将ch转换为大写,是则返回true。toLowerCase(charch)将ch转换为小写,是则返回true。isLetter(charch)判断ch是否为字母,是则返回true。isDigit(charch)判断ch是否为数字,是则返回true。isLetterOrDigit(charch)判断ch是否为字母或数字,是则返回true。isSpaceChar(charch)判断ch是否为Unicode空白字符。例题:2024/12/24李飞——东北大学秦皇岛分校计算中心26/35例4.12比较两个字符publicclasseg4_12{ publicstaticvoidmain(String[]args){ Charactera=newCharacter('b'); Characterb=newCharacter('B'); intdif=pareTo(b); if(dif==0) System.out.println("a等于b"); else if(a.equals(Character.toLowerCase(b.charValue()))) System.out.println("忽略大小写的a与b字符相同"); else System.out.println("a不等于b");}}4.2.2定长字符串的操作

2024/12/24李飞——东北大学秦皇岛分校计算中心27/35创建String对象通过new运算符和字符串类的构造方法创建字符串对象

在初始化字符串时,直接通过字符序列的集合或字符串常量创建字符串对象。其语句格式为String字符串对象名={字符列表};或String字符串对象名=“字符串常量”;String类的常用构造方法

2024/12/24李飞——东北大学秦皇岛分校计算中心28/35构造方法说明String()创建一个空字符串String(char[]value)创建一个字符串,它的值是字符数组value的内容String(char[]value,intoffset,intcount)创建一个字符串,它的值是字符数组value中第offset个下标变量开始的count个字符。String(byte[]bytes)根据字节数组建立字符串,字符串内容为字节数组每个元素对应的ASCII码publicString(byte[]bytes,intoffset,intlength,Charsetcharset)通过使用指定的charset字符集解码指定的byte子数组,构造一个新的String。新的字符串从第offset元素开始共length个字符String(StringBufferbuffer)创建一个字符串,它包含字符串缓冲区buffer中当前包含的字符序列。2024/12/24李飞——东北大学秦皇岛分校计算中心29/35例4.8用各种方法创建字符串对象。importjava.io.UnsupportedEncodingException;publicclasseg4_8{ publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{ char[]a={'H','e','l','l','o'}; char[]b={'H','u','a','n','g'}; byte[]c={68,97,111}; byte[]d={77,121,32,46}; Stringc0=newString(a); Stringc1="Qin"; Stringc2=newString(b,0,5); Stringc3=newString(c); Stringc4=newString(d,0,2,"US-ASCII"); StringBuffersb=newStringBuffer("Hometown"); Stringc5=newString(sb); System.out.println(c0+""+c1+""+c2+""+c3+","+c4+""+c5+"!"); }}使用String对象2024/12/24李飞——东北大学秦皇岛分校计算中心30/35表4.4字符串类的常用成员方法charAt(intindex)返回指定索引处的char值。compareTo(StringanotherString)按字典顺序比较两个字符串。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为0compareToIgnoreCase(Stringstr)按字典顺序比较两个字符串,不考虑大小写。规则同上concat(Stringstr)将指定字符串str连接到此字符串的结尾。replace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。equals(ObjectanObject)比较字符串和对象anObject是否相等,相等返回true否则返回falseequalsIgnoreCase(StringanotherString)将此String与另一个String比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。getChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)将字符从此字符串复制到目标字符数组。复制的第一个字符位于索引srcBegin处;要复制的最后一个字符位于索引srcEnd-1处。要复制到dst子数组的字符从索引dstBegin处开始,并结束于索引isEmpty()判断字符串是否为空。当且仅当length()为0时返回true。length()返回此字符串的长度。长度等于字符串中Unicode代码单元的数量。substring(intbeginIndex)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginIndex处开始,直到索引endIndex-1处的字符。toCharArray()将此字符串转换为一个新的字符数组。toLowerCase()将此String中的所有字符都转换为小写。toUpperCase()将此String中的所有字符都转换为大写。trim()返回字符串的副本,忽略前导空白和尾部空白。for-each语句功能:J2SE5.0后,启用。用于遍历数组。格式:for(typeelement:array){//读对数组array中每个type类型变量elementSystem.out.println(element);……}举例:publicclasseg5_1{ publicstaticvoidmain(String[]args){ int[]a={1,2,3,45,5,6,7,8,9}; for(intb:a) System.out.println(b); }}十二月24李飞计算中心31/30字符串类的常用类方法2024/12/24李飞——东北大学秦皇岛分校计算中心32/35表4.5字符串类的常用类方法copyValueOf(char[]data)返回指定数组中表示该字符序列的String。copyValueOf(char[]data,intoffset,intcount)返回指定数组中从第offset个字符开始的count个字符表示字符序列的String。valueOf(booleanb)返回boolean型变量b的字符串表示形式。其中的参数b可以是boolean类型也可以是char,int,long,float,double和字符数组中的任何一种类型。2024/12/24李飞——东北大学秦皇岛分校计算中心33/35例4.10把用户输入的明码转换为密码,转换规则为明码的每个字符的ASCII码加1.importjava.util.Scanner;publicclasseg4_10{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); Stringpassword,pass; charp[]; pass=sc.nextLine(); pass=pass.trim(); p=pass.toCharArray(); for(inti=0;i<p.length;i++) p[i]=(char)((int)p[i]+1); password=String.valueOf(p); System.out.println("明码为:"+pass); System.out.println("密码为:"+password); }}变长字符串的操作(StringBuffer类)创建StringBuffer对象2024/12/24李飞——东北大学秦皇岛分校计算中心34/35方法名说明StringBuffer()创建一个初始容量为16个字符空字符串缓冲区。StringBuffer(CharSequenceseq)通过字符序列seq创建一个含seq字符序列的字符串缓冲区。StringBuffer(intcapacity)

创建一个初始容量为capacity个字符的字符串缓冲区。StringBuffer(Stringstr)创建一个初始内容为str字符串缓冲区。StringBuffer的常用方法

2024/12/24李飞——东北大学秦皇岛分校计算中心35/35表4.5StringBuffer对象常用方法方法名说明append(b)向缓冲区追加参数b的字符形式。charAt(intindex)求缓冲区中第index个字符的char值。capacity()求当前字符串缓冲区的容量。delete(intstart,intend)删除缓冲区中以start开始到end结束的字符。deleteChar

温馨提示

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

评论

0/150

提交评论