Java数组.ppt
- 文档编号:2643875
- 上传时间:2022-11-04
- 格式:PPT
- 页数:59
- 大小:553KB
Java数组.ppt
《Java数组.ppt》由会员分享,可在线阅读,更多相关《Java数组.ppt(59页珍藏版)》请在冰豆网上搜索。
第四章第四章数组数组数组数组数组是相同类型的数据按顺序组成的一种复合数据类型通过数组名加数组下标来使用数组中的数据。
下标从0开始。
1.声明数组数组的声明声明格式:
数组元素类型数组名;数组元素类型数组名;例:
intMyIntArray;intMyIntArray;可以声明任何类型的数组原始类型或类类型chars;/或chars;Pointp;/wherePointisaclass声明数组仅仅指定了数组的名字和数组元素类型,在使用数组前还必须为它分配内存空间,即创建数组。
数组标志2.创建数组在为数组分配内存空间时必须指明数组的长度。
格式:
数组名=new数组元素类型数组元素个数;例:
s=newchar4;数组s获得了4个用来存放char型数据的内存空间数组变量s中存放着这些内存单元的首地址0x362ABss0s1s2s3数组的内存模式数组的内存模式Java数组的下限为0声明数组和创建数组可以一起完成:
intMyIntArray=newint10;例:
intarr=newint5;分配4个整数的内存空间intanewint4;0x1000把内存地址赋给变量aa1a3a2a000000x10040x10080x10000x1012创建数组的内存分配示意图创建数组的内存分配示意图inta=newint4;=a3.数组元素的使用一维数组通过下标访问自己的元素,如s0;下标从0开始,下标越界将发生异常;所有的数组都有一个属性length,存储数组元素的个数,利用它可方便地完成很多操作;floata=newfloat6;则a.length的值为6创建数组后,系统会给每个数组元素一个默认的值。
元素类型是基本数据类型的数组,在创建数组空间时可给出各数组元素的初值,这时可省略new运算符。
inta=1,2,3,4,5,6,7,8,9,10;inta;a=newint10;a0=1;a1=2;A9=10;静态初始化静态初始化动态初始化动态初始化4.数组的初始化给数组元素分配内存并为数组元素赋初值的过程称为数组初始化。
初始化可分为动态初始化和静态初始化。
静态初始化当数组元素的初始化值直接由括在大括号“”之间的数据给出时,就称为静态初始化。
适用于数组的元素不多且初始元素有限时。
往往和声明结合在一起使用。
其格式如下:
array_typearray_Name=element1,element2;动态初始化先用new操作符为数组分配内存,然后才为每一个元素赋初值。
声明的同时赋初值:
声明的同时赋初值:
Stringnames=“Georgianna”,“Jen”,“Simon”;Stringnames;names=newString3;names0=“Georgianna”;names1=“Jen”;names2=“Simon”;静态初始化静态初始化动态初始化动态初始化注:
由于数组中每一个元素都作为一个单独的对象来考虑,注:
由于数组中每一个元素都作为一个单独的对象来考虑,因而必须逐一建立因而必须逐一建立。
创建数组元素并初始化对象数组(引用变量数组):
对以某一类的对象为元素的数组而言,创建并初始化每个数组元素是必不可少的。
Studentstu;/定义一个Student类型数组stu=newStudent10;注意:
上述语句分配存储空间,创建Student类型数组,每个元素都是默认值为null的引用变量。
内存分配如下图所示:
01289-nullstuStudentstu;stu=newStudent10;图4-5创建对象数组的内存示意图完成所有数组元素的创建和初始化之后,才可在程序中使用这些元素。
如果强行使用未经上述步骤初始化的数组,会出现NullPointException异常错误。
如何创建数组元素?
执行对象的构造方法,即实例化对象。
for(inti=0;i10;i+)stui=newStudent();内存分配如图4-6所示:
01289stuStudent对象Student对象Student对象Student对象Student对象图4-6对象数组初始化后的内存示意图5.处理数组处理数组元素时,会经常使用for循环。
所有数组元素都是同一类型的,可以使用循环以同样的方式反复处理;由于数组的大小已知,使用for循环比较合理。
(1)用随机数初始化数组以下循环用0到99之间的随机整数初始化数组myListintmyList=newint5;for(inti=0;imyList.length;i+)myListi=(int)(Math.random()*100);
(2)输出数组for(inti=0;imyList.length;i+)System.out.print(myListi+);为输出数组,必须使用类似下面的循环,输出数组中的每一个元素。
(3)对所有元素求和intsum=0;for(inti=0;imyList.length;i+)sum+=myListi;System.out.println(和为:
+sum);(4)查找最大元素intmax=myList0;for(inti=0;imax)max=myListi;System.out.println(最大值为:
+max);6.增强的for循环在J2SE5.0中,Java语言增加了一种循环结构,称为增强的for循环,不用下标变量就可以顺序地访问整个数组。
for(intele:
myList)System.out.print(ele+);代码可以读作“对myList中的每个元素进行以下操作”例例1:
输出数组中的最大及最小值Arraymax.java例2:
读入6个整数,找出其中的最大者,并统计其出现的次数TestArray.java例3:
数组元素的复制ArrCopy.java(程序存在的问题?
下页)例4:
编程模仿扔硬币游戏rengYingBi.java例5:
抽奖游戏:
36选7(给方法传递数组参数)RandomA1.java例6:
对象数组ArrOb.java7.数组的复制在Java中,可以使用赋值语句复制基本类型的变量,但不能复制数组。
将一个数组变量复制给另一个数组变量,实际上是一个数组的引用复制给另一个变量,使两个变量指向同样的内在地址。
Contentsoflist1list1Contentsoflist2list2赋值前list2=list1;Contentsoflist1list1Contentsoflist2list2赋值后list2=list1;Garbage复制数组有三种方法:
1.用循环语句逐个复制数组的元素intsourceArray=2,3,4,5,33;inttargetArray=newintsourceArray.length;for(inti=0;isourceArray.length;i+)targetArrayi=sourceArrayi;复制数组有三种方法:
2.用System类中的静态方法arraycopy,不用循环System.arraycopy(sourceArray,0,targetArray,0,sourceArray.length);源数组中起始位置源数组中起始位置目标数组目标数组源数组源数组目标数组中起始位置目标数组中起始位置复制元素的个数复制元素的个数复制数组有三种方法:
3.用clone方法复制数组clone方法是对象类Object中的方法,可以创建一个有单独内存空间的对象。
不是所有的对象都可以克隆。
要成为一个可克隆的对象,它的类必须实现java.lang.Cloneable接口。
clone方法的返回值是Object类型,要使用强制类型转换为适当类型。
targetArray=(int)sourceArray.clone();给方法传递数组参数publicstaticvoidprintArray(intarray)for(inti=0;iarray.length;i+)System.out.print(arrayi+);调用方法:
intlist=3,1,2,6,4,2;printArray(list);Java使用值传递的方式将实参传递给方法:
对于基本数据类型的参数,传递的是实参的值对于数组类型的参数,参数值是引用,传递的是这个引用publicclassTestpublicstaticvoidmain(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例图示见下页图示见下页调用m(x,y)时,x和y的值传递给number和numbers。
因为y包含的是数组的引用值,所以numbers包含同一数组的相同引用值。
X中的基本数据类型值传递给中的基本数据类型值传递给number,y中的引用值传递给中的引用值传递给numbers例:
TestPassArray.java图示Invokeswap(intn1,intn2).Theprimitivetypevaluesina0anda1arepassedtotheswapmethod.SpacerequiredforthemainmethodintaStackSpacerequiredfortheswapmethodn2:
2n1:
1referencea1:
2a0:
1Thearraysarestoredinaheap.Invokeswap2(intarray).Thereferencevalueinaispassedtotheswap2method.HeapSpacerequiredforthemainmethodintaStackSpacerequiredfortheswap2methodintarrayreferencereferencepublicstaticintreverse(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从方法返回数组reverse方法的运行过程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声明并创建数组resultreverse方法的运行过程publicstaticintreverse(intlist)intresult=newintlist.length;for(inti=0,j=result.length-1;ilist.length;i+,j-)resultj=listi;return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 数组