收藏 分销(赏)

Java数组PPT课件.ppt

上传人:可**** 文档编号:762191 上传时间:2024-03-06 格式:PPT 页数:61 大小:1.11MB 下载积分:11 金币
下载 相关 举报
Java数组PPT课件.ppt_第1页
第1页 / 共61页
Java数组PPT课件.ppt_第2页
第2页 / 共61页


点击查看更多>>
资源描述
第四章 数组1数组数组是相同类型的数据按顺序组成的一种复合数据类型通过数组名加数组下标来使用数组中的数据。下标从0开始。21.声明数组数组的声明格式:数组元素类型数组名;数组元素类型数组名;例:intMyIntArray;intMyIntArray;可以声明任何类型的数组原始类型或类类型chars;/或chars;Pointp;/wherePointisaclass声明数组仅仅指定了数组的名字和数组元素类型,在使用数组前还必须为它分配内存空间,即创建数组。数组标志32.创建数组在为数组分配内存空间时必须指明数组的长度。格式:数组名=new数组元素类型数组元素个数;例:s=newchar4;数组s获得了4个用来存放char型数据的内存空间数组变量s中存放着这些内存单元的首地址0 x362ABss0s1s2s3数组的内存模式Java数组的下限为04声明数组和创建数组可以一起完成:intMyIntArray=newint10;例:intarr=newint5;5分配4个整数的内存空间int a new int 4;0 x1000把内存地址赋给变量aa 1a 3a 2a 000000 x10040 x10080 x10000 x1012创建数组的内存分配示意图inta=newint4;=a63.数组元素的使用一维数组通过下标访问自己的元素,如s0;下标从0开始,下标越界将发生异常;所有的数组都有一个属性length,存储数组元素的个数,利用它可方便地完成很多操作;floata=newfloat6;则a.length的值为67创建数组后,系统会给每个数组元素一个默认的值。元素类型是基本数据类型的数组,在创建数组空间时可给出各数组元素的初值,这时可省略new运算符。inta=1,2,3,4,5,6,7,8,9,10;inta;a=newint10;a0=1;a1=2;A9=10;静态初始化动态初始化4.数组的初始化8给数组元素分配内存并为数组元素赋初值的过程称为数组初始化。初始化可分为动态初始化和静态初始化。静态初始化当数组元素的初始化值直接由括在大括号“”之间的数据给出时,就称为静态初始化。适用于数组的元素不多且初始元素有限时。往往和声明结合在一起使用。其格式如下:array_typearray_Name=element1,element2;动态初始化先用new操作符为数组分配内存,然后才为每一个元素赋初值。9声明的同时赋初值:Stringnames=“Georgianna”,“Jen”,“Simon”;Stringnames;names=newString3;names0=“Georgianna”;names1=“Jen”;names2=“Simon”;静态初始化动态初始化注:由于数组中每一个元素都作为一个单独的对象来考虑,因而必须逐一建立。10创建数组元素并初始化对象数组(引用变量数组):对以某一类的对象为元素的数组而言,创建并初始化每个数组元素是必不可少的。Studentstu;/定义一个Student类型数组stu=newStudent10;注意:上述语句分配存储空间,创建Student类型数组,每个元素都是默认值为null的引用变量。内存分配如下图所示:1101289-nullstuStudent stu;stu=new Student10;图4-5创建对象数组的内存示意图完成所有数组元素的创建和初始化之后,才可在程序中使用这些元素。如果强行使用未经上述步骤初始化的数组,会出现NullPointException异常错误。12如何创建数组元素?执行对象的构造方法,即实例化对象。for(inti=0;i10;i+)stui=newStudent();内存分配如图4-6所示:01289stuStudent对象Student对象Student对象Student对象Student对象图4-6对象数组初始化后的内存示意图135.处理数组处理数组元素时,会经常使用for循环。所有数组元素都是同一类型的,可以使用循环以同样的方式反复处理;由于数组的大小已知,使用for循环比较合理。14(1)用随机数初始化数组以下循环用0到99之间的随机整数初始化数组myListintmyList=newint5;for(inti=0;imyList.length;i+)myListi=(int)(Math.random()*100);15(2)输出数组for(inti=0;imyList.length;i+)System.out.print(myListi+);为输出数组,必须使用类似下面的循环,输出数组中的每一个元素。16(3)对所有元素求和intsum=0;for(inti=0;imyList.length;i+)sum+=myListi;System.out.println(和为:+sum);17(4)查找最大元素intmax=myList0;for(inti=0;imax)max=myListi;System.out.println(最大值为:+max);186.增强的for循环在J2SE5.0中,Java语言增加了一种循环结构,称为增强的for循环,不用下标变量就可以顺序地访问整个数组。for(intele:myList)System.out.print(ele+);代码可以读作“对myList中的每个元素进行以下操作”19例例1:输出数组中的最大及最小值Arraymax.java例2:读入6个整数,找出其中的最大者,并统计其出现的次数TestArray.java例3:数组元素的复制ArrCopy.java(程序存在的问题?下页)例4:编程模仿扔硬币游戏rengYingBi.java例5:抽奖游戏:36选7(给方法传递数组参数)RandomA1.java例6:对象数组ArrOb.java207.数组的复制在Java中,可以使用赋值语句复制基本类型的变量,但不能复制数组。将一个数组变量复制给另一个数组变量,实际上是一个数组的引用复制给另一个变量,使两个变量指向同样的内在地址。Contents of list1 list1 Contents of list2 list2 赋值前 list2=list1;Contents of list1 list1 Contents of list2 list2 赋值后 list2=list1;Garbage 21复制数组有三种方法:1.用循环语句逐个复制数组的元素intsourceArray=2,3,4,5,33;inttargetArray=newintsourceArray.length;for(inti=0;isourceArray.length;i+)targetArrayi=sourceArrayi;22复制数组有三种方法:2.用System类中的静态方法arraycopy,不用循环System.arraycopy(sourceArray,0,targetArray,0,sourceArray.length);源数组中起始位置目标数组源数组目标数组中起始位置复制元素的个数23复制数组有三种方法:3.用clone方法复制数组clone方法是对象类Object中的方法,可以创建一个有单独内存空间的对象。不是所有的对象都可以克隆。要成为一个可克隆的对象,它的类必须实现java.lang.Cloneable接口。clone方法的返回值是Object类型,要使用强制类型转换为适当类型。targetArray=(int)sourceArray.clone();24给方法传递数组参数publicstaticvoidprintArray(intarray)for(inti=0;iarray.length;i+)System.out.print(arrayi+);调用方法:intlist=3,1,2,6,4,2;printArray(list);Java使用值传递的方式将实参传递给方法:对于基本数据类型的参数,传递的是实参的值对于数组类型的参数,参数值是引用,传递的是这个引用25publicclassTestpublicstaticvoidmain(Stringargs)intx=1;/xrepresentsanintvalueinty=newint10;/yrepresentsanarrayofintvaluesm(x,y);/InvokemwithargumentsxandySystem.out.println(xis+x);System.out.println(y0is+y0);publicstaticvoidm(intnumber,intnumbers)number=1001;/Assignanewvaluetonumbernumbers0=5555;/Assignanewvaluetonumbers0例图示见下页26调用m(x,y)时,x和y的值传递给number和numbers。因为y包含的是数组的引用值,所以numbers包含同一数组的相同引用值。X中的基本数据类型值传递给number,y中的引用值传递给numbers27例:TestPassArray.java图示 Invoke swap(int n1,int n2).The primitive type values in a0 and a1 are passed to the swap method.Space required for the main method int a Stack Space required for the swap method n2:2 n1:1 reference a1:2 a0:1 The arrays are stored in a heap.Invoke swap2(int array).The reference value in a is passed to the swap2 method.Heap Space required for the main method int a Stack Space required for the swap2 method int array reference reference 28publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult从方法返回数组29reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000000声明并创建数组result302024/3/6 周三31reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000000i=0andj=532reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000000i(=0)islessthan633reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000001i=0andj=5Assignlist0toresult534reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000001Afterthis,ibecomes1andjbecomes435reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000001i(=1)islessthan636reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000021i=1andj=4Assignlist1toresult437reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000021Afterthis,ibecomes2andjbecomes338reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000021i(=2)isstilllessthan639reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000321i=2andj=3Assignlistitoresultj40reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000321Afterthis,ibecomes3andjbecomes241reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456000321i(=3)isstilllessthan642reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456004321i=3andj=2Assignlistitoresultj43reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456004321Afterthis,ibecomes4andjbecomes144reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456004321i(=4)isstilllessthan645reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456054321i=4andj=1Assignlistitoresultj46reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456054321Afterthis,ibecomes5andjbecomes047reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456054321i(=5)isstilllessthan648reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456654321i=5andj=0Assignlistitoresultj49reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456654321Afterthis,ibecomes6andjbecomes-150reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456654321i(=6)6isfalse.Soexittheloop.51reverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;returnresult;intlist1=newint1,2,3,4,5,6;intlist2=reverse(list1);listresult123456654321Returnresultlist252练习改写36选7的抽奖游戏程序,用方法实现抽奖操作,方法的返回值为以获奖号码为元素的数组。改写求二维数组最大值的程序,用方法来求得二维数组的最大值,二维数组作为参数。53二维数组可以使用二维数组表示矩阵或表格。声明二维数组的语法:数据类型数组名;数据类型数组名;例:声明int型的二维数组变量matrixintmatrix;或:intmatrix;创建二维数组:matrix=newint55;数组元素赋值:matrix21=7;/每个下标必须放在一对方括号中54可以使用静态初始化来声明、创建和初始化二维数组。intarray=1,2,3,4,5,6;intarray=newint23;array00=1;array01=2;array02=3;array10=4;array11=5;array12=6;等价于55二维数组Java中没有真正的多维数组,但因为数组元素可以声明为任何类型,所以可以建立数组的数组(的数组),由此得到多维数组;n维数组是n-1维数组的数组;声明多维数组时使用类型及多对方括号,如:int二维数组,每个元素是int类型的。inttwoDim=newint4;twoDim0=newint5;twoDim1=newint5;第一行调用new创建的对象只是一个一维数组,含4个元素,每个元素又是对整型数组元素的null引用。56创建二维数组的格式typearrayN=newtypearrleng1;arrayN0=newtypearrleng2;arrayN1=newtypearrleng2;arrayNarrleng1-1=newtypearrleng2;该声明创建的数组第一维的大小是arrleng1,第二维大小为arrleng2;创建了一个矩阵数组,即第二维的大小一致;Java中可以创建非矩阵数组。57创建非矩阵数组inttwoDim=newint4;twoDim0=newint2;twoDim1=newint4;twoDim2=newint6;twoDim3=newint8;数组各维的长度如下:XXXXXXXXXXXXXXXXXXXX数组形式twoDim.length=4twoDim0.length=2twoDim1.length=4twoDim2.length=6twoDim3.length=858练习判断下列数组的声明是否合法:1.inta1=newint23;2.inta2=newint2;3.inta3=newint46;4.intarr123;5.intarr2=newint4;6.intarr3=4=newint34;7.Arr12,3=7;求二维数组的最大值ArrMax.java59作业1.声明并创建一个45的int 矩阵2.用随机数初始化二维数组3.输出二维数组元素4.求二维数组所有元素的和602024/3/6 周三61
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服