




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 数组和字符串§4.1 数组§数组的定义如下:(1) 数组是java语言提供的一种复合数据类型(2) 放相同的数据类型,可以是基本数据类型或复合数据类型(3) 数据下标默认从0开始,而且访问是不可超过定义的上限,否则会产生越界异常。§ 1、一维数组的声明数组的声明实际是创建一个引用,通过代表引用的这个名字来引用数组,数组声明的格式如下:两种格式。数据类型 数组名;数据类型 数组名; 例如: int a; 声明一个数据类型为int的数组。 char b; 声明一个数据类型为char的数组。 Pencil c; 声明一个数据类型为Pencil类的数组。说明:上面
2、只是声明了数组a,而没有分配存储空间。其内存模型如下:堆内存区堆栈内存区nulla2、数组的创建 (1)由于数组是一个对象,所以可以使用new来创建一个数组。例如: a=new int10;创建存放10个int类型数据的数组 b=new Pencil20; 创建存放20个Pencil类数据的数组。说明:上面使用new给数组a分配内存空间之后,其内存模型如下:a堆内存区堆栈内存区10000a.lengtha0a1a9 之后,可以对数组a赋值,如: a0=23; a1=32; a9=87; 其内存模型如下:a堆内存区堆栈内存区10233287lengtha0a1a9(2)也可以用下面的方法声明创建
3、和初始化一个数组: int a=1,2,3,4,5,6,7,8; 说明:java语言的数组作为对象来看待,即通过引用来操作。将数组传递到方法中时,只传递引用,而不是整个数组元素。每个数组对象都有一个公共变量length,用于存放数组的长度。 3一维数组元素的引用 数组元素的引用方式为: arrayNameindexindex为数组下标,它可以为整型常数或表达式,下标从0开始,范围是0<=index<length。如果index超出了数组大小的范围,则会产生ArrayIndexOutOfBoundException异常,每个数组都有一个属性length指明它的长度,例如:intArr
4、ay.length指明数组intArray的长度。4一维数组使用的例子气泡排序(从大到小)class xxpublic static void main(String arg) int i,j; int a=6,25,3,-5,21,30,9,0; for(i=0;i<a.length;i+) for(j=i+1;j<a.length;j+) if(ai<aj) int temp=ai; ai=aj; aj=temp; for(i=0;i<a.length;i+)程序运行结果如下:30 25 21 9 6 3 0 -5 Press any key to continue
5、.§ 1有以下数组:int a=12,45;int b;进行如下赋值操作:b=a;则这两个数组的内存模型为:堆内存区堆栈内存区aa.length或b.lengtha0或b0a1或b121245b可以通过a0、a1和a.length以及b0、b1和b.length来访问同一对象。class Examplepublic static void main(String args)int a=12,23;int b;b=a; b0=100;运行结果如下:12 23 212 23 2100 23 2100 23 2Press any key to continue.void arraycopy
6、(Object sourceArray, int sourceArrayStratPosition, Object destinationArray, Int destinationArrayStartPosition, Int numberOfElementsToCopied);例如上面的例子可以使用下面的语句完成:System.arraycopy(a,0,b,0,a.length);例子程序如下:class Examplepublic static void main(String args)int a=12,23;int b=new int2;System.arraycopy(a,0,b
7、,0,a.length); b0=100;运行结果为:12 23 212 23 212 23 2100 23 2Press any key to continue.说明:再调用arraycopy方法之前必须先分配目标数组的空间。采用这一方法进行数组复制后,内存空间如下:堆内存区堆栈内存区alengtha0a121245blengthb0b121245(3)当数组元素的值是对象的引用时,采用上面两种方法不能复制所引用的对象,只能复制对象的引用。例如: class Point2D int x; int y; Point2D(int x,int y) this.x=x; this.y=y; 使用数组
8、定义语句:Point2D points;后,points的内存模型如下:null堆内存区堆栈内存区points 使用new语句:points=new Point2D2后,内存模型如下:points堆内存区堆栈内存区lengthpoints0points12nullnull接着为第一个数组元素赋值,即points0=new Point2D(1,2)语句执行后,points的内存模型如下:points12xy2nulllengthpoints0points1使用下面语句可以给新数组变量赋值:Point2D points1=points赋值后,points1和points的内存模型如下:points
9、12xy2nulllengthpoints0points1points1 如果使用第二种方式复制数据,则使用下面的语句: points1=new point2Dpoints.length; System.arraycopy(points,0,points1,o,points.length); 经过上述语句后,points和points1的内存模型如下:堆内存区堆栈内存区12xy2nulllengthpoints0points1points2nulllengthpoints0points1points1上述数据的复制,只复制了数据元素的引用,而没有复制数组元素所对应的对象。如要完成完整的数组复制
10、,可使用下面的语句:points10=new point2Dpoints0.x,points0.y;例子:class Examplepublic static void main(String args)Point2D points;points=new Point2D2;points0=new Point2D(1,2); Point2D points1=points;points0.x=10;Point2D points2=new Point2Dpoints.length;System.arraycopy(points,0,points2,0,points.length);points20=
11、new Point2D(points0.x,points0.y);points20.x=21; class Point2Dint x;int y;Point2D(int x,int y)this.x=x;this.y=y;程序运行结果:1212102102102101021Press any key to continue.§多维数组就是数组的数组,有二维、三维、。之分,这里主要介绍二维数组。1、二维数组的声明: 格式一:数据类型 数组名; 格式二:数据类型 数组名; 格式三:数据类型 数组名; 例子: float a,e; char b; float c,f; 说明:声明了之后,并
12、没有创建空间,只是创建了一个引用。2、二维数组的创建:方法一:使用new来创建:1) 直接为每一维分配空间,格式如下: type arrayName = new typearrayLength1arrayLength2; int a = new int23; 上面创建的二维数组a的内存空间模型为:堆内存区堆栈内存区2a.lengtha0a1aa0.lengtha00a01a023a1.lengtha10a11a1232) 从最高维开始,分别为每一维分配空间:arrayName = new typearrayLength1 ;arrayName0 = new typearrayLength20;
13、arrayName1 = new typearrayLength21;arrayNamearrayLength1-1 = new typearrayLength2n;二维简单数据类型数组情况如下,int a = new int2 ;a0 = new int3;a1 = new int5; 上面创建的二维数组a的内存空间模型为:堆内存区堆栈内存区2a.lengtha0a1aa0.lengtha00a01a023a1.lengtha10a11a12a13a145对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间,而且必须为每个数组元素单独分配空间。例如:String
14、s = new String2 ;s0= new String2;/为最高维分配引用空间s1= new String2; /为最高维分配引用空间s00= new String("Good");/ 为每个数组元素单独分配空间s01= new String("Luck");/ 为每个数组元素单独分配空间s10= new String("to");/ 为每个数组元素单独分配空间s11= new String("You");/ 为每个数组元素单独分配空间方法二:也可以用下面的方法声明创建和初始化一个数组: int a=1,
15、2,3,4,5,6; /声明创建并初始化了一个3行2列的二维数组 char b=a,b; /声明创建并初始化了一个1行2列的二维数组说明:Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。如下: int a=1,2,2,3,3,3;上面创建的二维数组a的内存空间模型为:堆内存区堆栈内存区3aa0.lengtha0011a.lengtha0a1a2a2.lengtha20a21a223333a1.lengtha10a11222 程序如下: class xxpublic static void main(String arg) int a=
16、1,2,2,3,3,3; /数组越界 程序运行结果如下:3123122333 at xx.main(xx.java:14)Press any key to continue.二维数组举例:两个矩阵相乘public class MatrixMultiplypublic static void main(String args)int i,j,k;int a=new int 23; /动态初始化一个二维数组int b=1,5,2,8,5,9,10,-3,2,7,-5,-18;/静态初始化一个二维数组int c=new int24; /动态初始化一个二维数组for (i=0;i<2;i+)fo
17、r (j=0; j<3 ;j+)aij=(i+1)*(j+2);for (i=0;i<2;i+)for (j=0;j<4;j+)cij=0;for(k=0;k<3;k+)cij+=aik*bkj;/打印Matrix C标记for(i=0;i<2;i+)for (j=0;j<4;j+) 如:class DuoWeiShuZupublic static void main(String args) /java的多维数组可以是维度不同的数组int a=1,2,4,5,6,7;float b0=1,2,3,4;float b1=5,6;float b=b0,b1;f
18、loat d0=0,9,8;float d1=7,6;float d=new float2;d0=d0;d1=d1;int c=1,2,3,4;for(int i=0;i<2;i+)for(int j=0;j<2;j+)说明:int a0=1,2; int a1=3,4,5; int a=new int2; a0=a0; a1=a1; 或 int a0=1,2; int a1=3,4,5; int a=a0,a1; 或 int a=1,2,3,4,5; 则数组a的内存空间如下:§4.2 字符串§在java中字符串是采用面向对象的方法进行处理的,它提供两个类来完成
19、字符串的处理,这两个类是:String类和StringBuffer类。String类处理字符串常量,StringBuffer处理字符串变量。§ 1、创建String型字符串:在String类中用来创建String型字符串的构造方法有: (1)String() (2)String(字符数组名) (3)String(char,int startindex,int numchars) (4)String(byte,byte highByte) (5)String(byte,byte highByte,int startindex,int numchars)(6)String stringn
20、ame=stringContant (7)String(stringContant) 例子: class ZiFuChuan1public static void main(String args)String str=new String();/创建一个空字符串Str="I am an university student."char charstr='I','a','m','a','n','u','n','v','e','
21、;r'String str1=new String(charstr);/通过传递一个字符数组创建一个非空字符串String str2=new String(charstr,2,5);byte ascii=65,66,67;String str3=new String(ascii,0);String str4=new String(ascii,0,0,2);String str5="ABCD"ABCDString str6=new String(“happy”);2、字符串连接:运算符'+'可用来实现字符串的连接:String s = "He
22、 is "+age+" years old."” “+89);其他类型的数据与字符串进行"+"运算时,将自动转换成字符串。具体过程如下:String s=new StringBuffer("he is").append(age).append("years old").toString();注意:除了对运算符"+"进行了重载外,java不支持其它运算符的重载。3、基本方法: 在String类中提供了常用的对字符串处理的方法,有: (1)length() (2)charAt() (3)g
23、etChars() (4)getBytes() (5)equals()和equalsIgnoreCase() (6)compareTo()和compareToIgnoreCase(String other) (7)regionMatches()(8)indexOf()和lastIndexOf()下面是对String型字符串修改的方法。(9)toLowerCase()和toUpperCase()(10)replace(char oldChar,char newChar)(11)substring(int beginIndex)和substring(int begingIndex,int endI
24、ndex)(12)concat(String otherStr)下面是也是字符串比较的方法:(13)startsWith(String prestr)(14)endsWith(String endStr)(15)startsWith(String strObj,int offset)例子1:(1)(2)(3)(4)(5)的使用 public class ZiFuChuan2public static void main(String args)String str1="acbd"int len=str1.length(); /jieguo:4/在java中将“abcdef”
25、当作String的对象看待,所以可以使用类中的方法int len1="abcdef".length(); /jieguo:6char str2="abcdefgh".charAt(0); /jieguo:a str1="I am a university student." int start=2; int end=8; char buf=new charend-start; str1.getChars(start,end,buf,0); /jieguo:am a ubyte buf1=new byteend-start;str1.g
26、etBytes(start,end,buf1,0);for(int i=0;i<buf1.length;i+)String S1="hello"String S2="hello"String S3="Good bye"String S4="HELLO" /jieguo:true /jieguo: false; ;/jieguo:true /jieguo:true /jieguo:false例子2:(6)的使用public class ZiFuChuan3static String str="now&
27、quot;,"is","the","time","aid","help","the"public static void main(String args) /jieguo: 5/jieguo: -11/jieguo: -1/jieguo: 19/jieguo: 0 /下面对字符串排序for(int i=0;i<str.length;i+) for(int j=i+1;j<str.length;j+) if(pareTo(strj)<0) S
28、tring t=stri; stri=strj; strj=t; 例子3:(7)的使用public class ZiFuChuan4public static void main(String args)String str="china"String str1="america" /jieguo: true /jieguo: false/jieguo: true; /jieguo: false 例子4:(8)的使用class ZiFuChuan5public static void main(String args)String str="N
29、ow is the time for all good men"+"to come to the aid of their country:" +"and pay their due taxes." /jieguo: 92 /jieguo: 7 /jieguo: 86 /jieguo: 7 /jieguo:76 /jieguo:11 /jieguo:54 /jieguo:43 /jieguo:54 例子5:关于(9)、(10)、(11)、(12)、的使用。class ZiFuChuan8public static void main(Strin
30、g args) String str1="CHinA" String str2=new String(); str2=str1.toLowerCase(); String str3=str2.toUpperCase(); String str4="The student" String str5=str4.replace('t','o'); String str6=str4.substring(2); str6=str4.substring(2,5); 说明:注意substring()方法截取的子串的范围(从位置begin
31、gIndex到位置endIndex-1)。String str7=str4.concat(str6); 例子6:关于(13)、(14)、(15)的使用。class ZiFuChuan8public static void main(String args) String str="ABCDEF" String str1="ABCDEFGHHGF" §StringBuffer型字符串是指字符串中的内容可变的字符串,其可变性体现在两个方面:一是字符串中的字符可以被修改,二是字符串的长度可以自动增加。1、创建StringBuffer型字符串:创建St
32、ringBuffer型字符串使用StringBuffer类的构造方法,有:(1)StringBuffer() 该方法创建一个空串缓冲区,长度为16(2)StringBuffer(int len) 该方法创建一个长度为len的空串缓冲区(3)StringBuffer(String str) 该方法创建一个初始内容为str的StringBuffer型字符串,其长度为str.length()+16,即附加了一个长度为16的空缓冲区2、基本方法: StringBuffer类提供了以下方法,以便对Stringbuffer型字符串进行处理。 (1)charAt()和setCharAt() (2)setLe
33、ngth() (3)length() (4)capacity() (5)append() (6)insert() (7)toString() (8)getChars() (9)delete(int beginIndex,int endIndex) 例子1:(1)(2)(3)(4)的使用 class ZiFuChuan6public static void main(String args)/jieguo: EStringBuffer str=new StringBuffer("Hello");str.setCharAt(0,'h'); /jieguo: he
34、llo/jieguo: 5str.setLength(12);/jieguo: 12 /jieguo: hello str.setLength(3); /jieguo: hel /jieguo: 3/jieguo: 21 StringBuffer str1=new StringBuffer(); /jieguo: 0/jieguo: 16 例子2:(5)(6)的使用: class ZiFuChuan7public static void main(String args)int i=34;float j=24f;char k='A'StringBuffer str=new StringBuffer(40);str.append("China=").append(i).append(j).append(k);/jiguo: China=3424.0A /jieguo: 13 /jieguo: 40str.insert(6,"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中物理 第二章 机械波 2 波速与波长、频率的关系教学设计3 教科版选修3-4
- 7.2 运动的快慢 速度(教学设计)-2024-2025沪粤版物理八年级下册
- 远东宏信租赁铸剑培训
- 九年级英语下册 Unit 1 Asia Integrated skill and Study skills教学设计 (新版)牛津版
- 2024-2025学年高中历史 第五单元 第2课 拿破仑帝国的建立与封建制度的复辟教学设计1 新人教版选修2
- 七年级地理下册 第八章 第四节 澳大利亚教学设计 (新版)新人教版
- 2019商务星球版七年级下册地理6.1《世界第一大洲》教学设计
- Unit 2 Know your body 第3课时(教学设计)-2024-2025学年外研版(三起)(2024)英语三年级下册
- 月嫂上岗技巧培训课件
- 2023八年级英语下册 Module 2 Experiences Unit 2 They have seen the Pyramids第三课时教学设计 (新版)外研版
- 玩具照相机细分市场深度研究报告
- 人工智能算法与实践-第16章 LSTM神经网络
- 中考监考和考务人员培训手册
- 数学史简介课件可编辑全文
- 第22课《从局部抗战到全国抗战》 课件 统编版高中历史中外历史纲要上册
- 浙江省A9协作体2023-2024学年高二下学期4月期中英语试题
- 医疗救助补助资金管理办法
- 水电站110kV变电站接地电阻计算书
- 2025届江苏南京市盐城市高三第二次模拟考试历史试卷含解析
- 江苏省靖江外国语学校2023-2024学年中考数学最后冲刺模拟试卷含解析
- 鼠疫的防治专题知识讲座课件
评论
0/150
提交评论