第五章 数组与字符串.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第五章 数组与字符串.ppt》由会员分享,可在线阅读,更多相关《第五章 数组与字符串.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12本章主要内容本章主要内容一维和多维数组的定义一维和多维数组的定义1数组元素的访问数组元素的访问2字符串及应用字符串及应用32第5章 数组和字符串学习导读 字符、字符串、数组都是使用Java语言编制程序要经常使用的数据结构,因此,熟练掌握这些数据结构是进一步学习Java程序设计的必要阶段。通过本章的学习,应该能够熟练掌握字符、字符串、数组的各种基本操作。345.1 5.1 数组的基本概念数组的基本概念n数组的概念数组的概念 相同数据类型的元素按一定顺序排列的集合。相同数据类型的元素按一定顺序排列的集合。JavaJava中,中,数组元素可以为简单数据类型,也可以为对象。数组元素可以为简单数据类
2、型,也可以为对象。n JavaJava语言内存分配问题语言内存分配问题n栈内存:定义的基本类型的变量和对象的引用变量,栈内存:定义的基本类型的变量和对象的引用变量,超出作用域将自动释放。超出作用域将自动释放。n堆内存:存放由堆内存:存放由newnew运算符创建的对象和数组。由运算符创建的对象和数组。由JavaJava虚拟机的自动垃圾回收器来管理。虚拟机的自动垃圾回收器来管理。455.1 5.1 数组的基本概念数组的基本概念nJavaJava语言内存分配问题语言内存分配问题(续续)n引用变量:为数组或对象起的一个名称。在堆中创建引用变量:为数组或对象起的一个名称。在堆中创建一个数组或对象后,还可
3、在栈中定义一个引用变量存一个数组或对象后,还可在栈中定义一个引用变量存放该数组或对象在堆内存中的首地址(对象的句柄),放该数组或对象在堆内存中的首地址(对象的句柄),以后就可在程序中使用栈的引用变量来访问堆中的数以后就可在程序中使用栈的引用变量来访问堆中的数组或对象。组或对象。数组和对象在没有引用变量指向它时,数组和对象在没有引用变量指向它时,就会变成垃圾,不被使用,但占内存,就会变成垃圾,不被使用,但占内存,在随后不确定的时间释放。在随后不确定的时间释放。565.1 5.1 数组的基本概念数组的基本概念n数组的主要特点数组的主要特点n数组是相同数据类型的元素的集合;数组是相同数据类型的元素的
4、集合;n数组中的各元素是有数组中的各元素是有先后顺序先后顺序的,它们在内存中按照的,它们在内存中按照这个先后顺序这个先后顺序连续存放连续存放在一起;在一起;n数组元素用整个数组的名字和它自己在数组中的顺序数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,位置来表示。例如,a0a0表示名字为表示名字为a a的数组中的第一的数组中的第一个元素,个元素,a1a1代表数组代表数组a a的第二个元素,依次类推。的第二个元素,依次类推。65.1数组 数组是相同类型变量的集合,可以使用共同的名字对它进行引用。在Java中,数组是对象,Object类中定义的方法都可以用于数组。数组可被定义为任何
5、有效数据类型,也就是说,数组元素可以是基本类型,也可以是类类型或者数组。在数组中:每个元素的数据类型相同。可以通过数组名和下标来确定每一个元素。每一个元素又可以是复合数据类型。75.1数组数组类型是一种特殊的对象。有:定义、初始化、引用和释放(由GC来自动实现)的过程。建立java数组需要以下三个步骤:声明数组创建数组空间初始化数组元素 85.2一维数组1.数组的声明,一维数组有两种格式:格式一:数组元素类型 数组名 如:int a;格式二:数组元素类型 数组名 如:int a;95.2 一维数组2.数组的创建说明:为数组开辟内存空间,在创建数组空间时必须为它指明数组的长度。一个数组是一个对象
6、,所以用new来创建数组 语法格式为:数组名=new 数组元素类型数组元素的个数;例如:int MyIntArray;MyIntArray=new int10;JavaJava中没有静态的数组定义,中没有静态的数组定义,中没有静态的数组定义,中没有静态的数组定义,内存都是通过内存都是通过内存都是通过内存都是通过newnew动态分配。动态分配。动态分配。动态分配。例如:例如:例如:例如:intint intArray5;/intArray5;/是错误的是错误的是错误的是错误的105.2 一维数组2.数组的创建例如:创建一个基本数据类型元素的数组:public char createArray()
7、char s;s=new char 26;for(int i=0;i 26;i+)s i=(char)(A+i);return s;115.2 一维数组3.数组的初始化 初始化数组就是要使数组中的各个元素都有确定的值。如果数组元素的类型是基本数据类型,由于基本数据类型都有缺省值,数组元素都自动初始化为缺省值,比如上面的数组a中的每一个数组元素值都是0。对于以某个类的对象为数组元素的数组,初始化每个数组元素是必须的。对于数组有几个需要注意的地方:(1)所有的数组对象都有一个属性length,这个属性存储了数组元素的个数。(2)Java编程环境会自动检查数组下标是否越界。125.2 一维数组3.数
8、组的初始化数组的初始化n静态初始化和动态初始化静态初始化和动态初始化 静态初始化就是在定义数组的同时对数组元素进行初始静态初始化就是在定义数组的同时对数组元素进行初始化化 静态初始化可用于任何元素类型,初值块中每个位置静态初始化可用于任何元素类型,初值块中每个位置的每个元素对应一个引用。的每个元素对应一个引用。如:如:intint intArrayintArray=1,2,3,4;=1,2,3,4;intint ages=34,12,45;ages=34,12,45;动态初始化是使用运算符动态初始化是使用运算符newnew为数组分配空间。数组说明为数组分配空间。数组说明的方括号中的数字表示数组
9、元素个数的方括号中的数字表示数组元素个数 例如:例如:intint MyIntArrayMyIntArray;MyIntArrayMyIntArray=new int2;=new int2;MyIntArray0=1 MyIntArray0=1,MyIntArray1=3MyIntArray1=3135.2 一维数组4.数组的边界 数组下标从0开始,元素个数length是数组类中唯一的数据成员变量 new创建数组时系统自动给length赋值数组一旦创建完毕,其大小就固定下来程序运行时可以使用length进行数组边界检查。如果发生越界访问,则抛出一个异常14155.2 5.2 一维数组一维数组v
10、动态内存分配说明动态内存分配说明用用newnew分配内存的同时,数组的每个元素都会自动赋默分配内存的同时,数组的每个元素都会自动赋默认值,整型为认值,整型为0 0,实数为,实数为0.00.0,布尔型为,布尔型为falsefalse,引用型为,引用型为nullnull。v一维数组元素的访问一维数组元素的访问n要想使用数组里的元素,可利用数组名和下标来实现。要想使用数组里的元素,可利用数组名和下标来实现。n数组元素的引用方式为:数组元素的引用方式为:数组名数组名 下标下标 n与与C/C+C/C+不同的是不同的是,JavaJava对数组元素要进行越界检查。对数组元素要进行越界检查。n对于每个数组都有
11、一个属性对于每个数组都有一个属性lengthlength指明它的长度,如指明它的长度,如x.lengthx.length指出指出数组数组x x所包含的元素个数。所包含的元素个数。见例题见例题5.115【例5.1】声明一个一维数组,其长度为5,利用循环对数组元素进行赋值,然后再利用另一个循环逆序输出数组元素的内容。n程序代码如下:程序代码如下:n/filename:App5_1.java 一维数组一维数组npublic class App5_1nn public static void main(String args)n nint i;nint a;/声明一个数组声明一个数组an 16na=n
12、ew int5;/分配内存空间供整型数组分配内存空间供整型数组a使用,其使用,其元素个数为元素个数为5nfor(i=0;i=0;i-)/逆序输出数组的内容逆序输出数组的内容nSystem.out.print(a+i+=+ai+,t);nSystem.out.println(n数组数组a的长度是:的长度是:+a.length);/输出数组的长度输出数组的长度n n17185.2 5.2 一维数组一维数组v一维数组的初始化及应用一维数组的初始化及应用若在声明数组时进行赋值即初始化称为静态内存分配。若在声明数组时进行赋值即初始化称为静态内存分配。数据类型数据类型 数组名数组名=初值初值0 0,初值,
13、初值1 1,初值,初值n n;如:如:intint a=1,2,3,4,5;a=1,2,3,4,5;v 注意注意在在JavaJava程序中声明数组时,无论用何种方式定义数组,程序中声明数组时,无论用何种方式定义数组,都都不能指定其长度不能指定其长度。见例题见例题5.2,5.318【例5.2】设数组中有n个互不相同的数,不用排序求出其中的最大值和次最大值。n/filename:App5_2.java 比较数组元素值的大小比较数组元素值的大小npublic class App5_2nn public static void main(String args)n n int i,max,sec;n
14、int a=8,50,20,7,81,55,76,93;/声明数组声明数组a,并赋初值,并赋初值n if(a0a1)n n max=a0;/max存放最大值存放最大值n sec=a1;/sec存放次最大值存放次最大值n n 19nelsen max=a1;n sec=a0;n nfor(i=2;imax)/判断最大值判断最大值n sec=max;/原最大值降为次最大值原最大值降为次最大值n max=ai;/ai为新的最大值为新的最大值n n else /即即ai不是新的最大值,但若不是新的最大值,但若ai大于次最大值大于次最大值n if(aisec)sec=ai;/ai为新的次最大值为新的次最
15、大值n n System.out.print(n其中的最大值是:其中的最大值是:+max);/输出最大值输出最大值n System.out.println(次最大值是:次最大值是:+sec);/输出次最大值输出次最大值n 20【例5.3】设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M报数,报数到第M的人,此人出圈,再从他的下一个人重新开始从1到M报数,如此进行下去,每次报数到M的人就出圈,直到所有人都出圈为止。给出这N个人的出圈顺序。npublic class App5_3nn public static void main(String args)n n final
16、int N=13,S=3,M=5;n int i=S-1,j,k=N,g=1;n int a=new intN;21n for(int h=1;h=k)/当数组下标i大于等于圈中的人数k时n i=i-k;/将数组的下标i减去圈中的人数k,n System.out.print(+ai);n for(j=i;jk-1;j+)n aj=aj+1;/ai出圈后,将后续人的前移n k-;/圈中的人数k减1n g+;/g为循环控制变量n while(g=N);/共有N人所以循环N次n n22235.3 5.3 foreachforeach语句与数组语句与数组vforeachforeach的语句的语句:不用
17、下标就可遍历整个数组不用下标就可遍历整个数组。v foreachforeach语句需提供语句需提供元素类型元素类型、循环变量的名字循环变量的名字(用于存储连续的元素)和用于从中检索元素的(用于存储连续的元素)和用于从中检索元素的数组数组。v语法:语法:for(type element:array)for(type element:array)System.out.println(elementSystem.out.println(element););每次从数组每次从数组array中取出一个元素,自中取出一个元素,自动赋给动赋给element,用户不用判断是否超,用户不用判断是否超出了数组的长
18、度。出了数组的长度。element的类型必须的类型必须与数组与数组array中元素的类型相同。中元素的类型相同。例如:例如:int arr=1,2,3,4,5;for(int element:arr)System.out.println(element);235.2一维数组4.数组的边界 例:例:class Test class Test public static void public static void main(Stringmain(String argsargs)intint list=1,2,3,4,5,j=0;list=1,2,3,4,5,j=0;for(for(intint
19、 i=1;i=5;i+)i=1;i=5;i+)System.out.println(listiSystem.out.println(listi););数组下标最大为4,越界245.2一维数组4.数组的边界 例:例:intint list=new list=new intint 10 10,j=0;j=0;for(for(intint i=0;i i=0;i list.lengthlist.length;i+);i+)j+=1;j+=1;循环的结束条件中使用list.length,而不是常数10。这样做不会引起数组下标越界,使程序更健壮,修改更方便。255.2一维数组5.数组的使用和复制 数组名
20、加上下标,引用方式为:index为数组下标,下标从0开始,一直到length-1 例如:arrayNameindex下标是整型常数或表达式 例如:arrayName1,arrayNamei,arrayName6*i265.2一维数组5.数组的使用和复制数组的使用和复制数组的复制,例如:数组的复制,例如:int num =9,8,3,0,2 int num =9,8,3,0,2;int numCopy=num;int numCopy=num;275.2一维数组6 6、数组的改变、数组的改变 不能改变一个已定义的数组的大小,但可以改变引用变量不能改变一个已定义的数组的大小,但可以改变引用变量所指向
21、的数组所指向的数组 例:例:intint j=1,12;j=1,12;j=new int3;j=new int3;for(for(intint i=0;i i=0;ij.length;ij.length;i+)+)jiji=i;=i;28例例5.2 逐个输入并计算逐个输入并计算10个学生的平均成绩。个学生的平均成绩。import java.io.*;public class Li4_01 public static void main(String args)throws IOException int k,count=10;/count为学生的个数为学生的个数 float score=new
22、 floatcount;/学生的成绩数组学生的成绩数组 float floatSum=0.0f,floatAver=0.0f;/学生的总成绩学生的总成绩和平均成绩和平均成绩 String str;BufferedReader buf=new BufferedReader(new InputStreamReader(System.in);29for(k=0;kcount;k+)System.out.print(请输入第请输入第+(k+1)+个个学生的成绩:学生的成绩:);str=buf.readLine();scorek=Float.parseFloat(str);floatSum+=score
23、k;floatAver=floatSum/count;System.out.println(这这+count+个同学的平个同学的平均成绩是:均成绩是:+floatAver);305.2 一维数组小结类型相同、数量确定的存储结构用下标访问数组中任一个元素,数组名下标声明、创建(new)、初始化/赋值;31325.4 5.4 多维数组多维数组v二维数组二维数组(JavaJava中无真正的多维数组,只是数组的数组中无真正的多维数组,只是数组的数组)n声明和内存分配:声明和内存分配:v与与C C语言的区别语言的区别数据类型数据类型 数组名数组名;数组名数组名=new 数据类型数据类型 行数行数 列数列
24、数;数据类型数据类型 数组名数组名=new 数据类型数据类型 行数行数列数列数;m行行12567n列列891011图图5.5 Java语言的二维数组不一定语言的二维数组不一定是矩形是矩形m行行12567n列列891011图图5.4 C语言的二维数组是矩形语言的二维数组是矩形1234分配内存时,分配内存时,必须指明行必须指明行和列的个数和列的个数32335.4 5.4 多维数组多维数组v二维数组定义的含义二维数组定义的含义nJavaJava中的二维数组看作是由多个一维数组构成。中的二维数组看作是由多个一维数组构成。n例如:例如:intint x;x;表示定义了一个表示定义了一个数组引用变量数组引
25、用变量x x,第一个元素为,第一个元素为x0,x0,最后一个为最后一个为xn-1xn-1,其长度不确定。,其长度不确定。nx=new x=new intint 3;3;表示数组表示数组x x有三个元素,每个元素都是有三个元素,每个元素都是intint 类型类型的一维数组,分别为的一维数组,分别为intint x0 x0、intint x1 x1、intint x2 x2。n给给x0 x0、x1x1、x2x2赋值赋值(它们的长度可以不一样它们的长度可以不一样),当它们指向真,当它们指向真正的数组对象,才可以引用数组中的元素。正的数组对象,才可以引用数组中的元素。x0=new int3;x1=ne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五章 数组与字符串 第五 数组 字符串
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内