ImageVerifierCode 换一换
你正在下载:

数组.docx

[预览]
格式:DOCX , 页数:21 ,大小:114.37KB ,
资源ID:12015305      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12015305.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数组.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数组.docx

1、数组第五章:数组 学习目标 数组的声明 创建数组 多维数据(数组的数组) 数组的界限 数组的拷贝数组的描述数组是我们接触的第一个容器,数组是固定空间的容器。一但定义好大小,将不能改变。由于Java中的数据类型分为两种:基本类型和引用类型。所以数组也有两种类型的:基本类型的数组和引用类型的数组(数组的数组也是引用类型的数组)数组声明语法: ;或 ;说明: 目前可以用private,public或着默认的修饰,private是封装的访问权限。 可以是任何原始类型(基本类型)或其它类(引用类型)。:任何合法的标识符。它代表所声明属性的名称。举例:char s ;Point p ; / where p

2、oint is a class在Java编程语言中,无论数组元素由原始类型构成,还是由类构成,数组都是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。上述这种将方括号置于变量名之后的声明数组的格式,是用于C、C+和Java编程语言的标准格式。这种格式会使声明的格式复杂难懂,因而,Java编程语言允许一种替代的格式,该格式中的方括号位于变量名的左边:char s;Point p; 这样的结果是,你可以认为类型部分在左,而变量名在右。上述两种格式并存,你可选择一种你习惯的方式。数组声明不指出数组的实际大小。

3、注意:当数组声明的方括号在左边时,该方括号可应用于所有位于其右的变量。char s1, s2; / s1,s2都是字符数组。char s1 ,s2; / s1是字符数组,s2是字符。创建数组语法: = new ;或 = new ;说明:任何合法的标识符。它代表所声明属性的名称。:可以是任何原始类型(基本类型)或其它类(引用类型)。: 一个整数值,数组的大小用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内大于或等于0,并小于数组长度。任何访问在上述界限之外的数组元素的企图都会引起运行时出错。public int createIntArray() int k = null; k =

4、 new int5; for (int i = 0; i k.length; i+) ki = i + 1; return k;你可以象创建对象一样,使用关键字new 创建一个数组。k = new int 5;创建了一个5个int值元素的数组。内存中数组初始化情形如下:对于应用类型元素的数组,示例如下:public Point createArray() Point p= null; p = new Point5; for (int i = 0; i p.length; I+) pi = new Point(i,i+1); return p;数组在内存中的映像则如下:当创建一个数组时,每个元素

5、都被初始化。在上述int数组k的例子中,每个值都被初始化为0;在数组p的例子中, 每个值都被初始化为null,表明它还未引用一个Point对象。在经过赋值 p0 = new Point(i,i+1)之后,数组的第一个元素引用为实际Point对象。Java编程语言允许使用下列形式快速创建数组:String names = “Georgianna”, “Jen”, “Simon”,;其结果与下列代码等同:String names ;names = new String 3;names 0 = “Georgianna”;names 1 = “Jen”;names 2 = “Simon”;这种”速记”

6、法可用在任何元素类型。例如:MyDate Dates = new MyDate (22,7,1964),new MyDate (1,1,2000), new MyDate (22,12,1964);适当类型的常数值也可被使用:Color palette = Color.blue,Color.red,Color.white;例1public class TestArray1 public static void main(String args) / 声明并初始化一个数组 int num = new int40; / 记录数组下标 int k = 0; / 循环找素数 for (int i =

7、2; i = 100; i+) int j = 2; for (; j i; j+) if (i % j = 0) break; if (j = i) / 表示是素数 numk+ = i; / 输出所有素数,5个一行 for (int i = 0; i k; i+) / 如果是小于10的数,多输出个空格,整齐 if (numi 10) System.out.print(numi + ); else System.out.print(numi + ); / 够5个数换行 if (i + 1) % 5 = 0) System.out.println(); 结果如下:例2把一个班的名字(String

8、类型,引用类型)保存起来,并进行输出。public class TestStudents public static void main(String args) / 定义3个空间大小的数组 String stu = new String3; / 数组是通过下标来赋值,下标从0开始 stu0 = java; stu1 = c+; stu2 = c#; / 下面的赋值将产生异常 stu3 = j2me; / 输出数据 for (int i = 0; i stu.length; i+) System.out.println(stui); 运行的结果如下:如果把stu3 = j2me; 这句去掉,运

9、行正常,结果如下:例3保存1到100之间的素数(除了1和它本身不能被其他整数整除的数)。public class TestArray3 public static void main(String args) / 声明并初始化一个数组 int num = new int40; / 记录数组下标 int k = 0; / 循环找素数 for (int i = 2; i = 100; i+) int j = 2; for (; j i; j+) if (i % j = 0) break; if (j = i) / 表示是素数 numk+ = i; / 输出所有素数,5个一行 for (int i

10、= 0; i k; i+) / 如果是小于10的数,多输出个空格,整齐 if (numi 10) System.out.print(numi + ); else System.out.print(numi + ); / 够5个数换行 if (i + 1) % 5 = 0) System.out.println(); 运行结果如下:多维数组Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组(和数组的数组的数组,等等)。一个二维数组(JAVA中没有二维数组的概念,二维数组其实就是数组的数组)如下例所示:int twoDim = new

11、int 4;twoDim0 = new int5;twoDim1 = new int5;首次调用new而创建的对象是一个数组,它包含4个元素,每个元素对类型array of int的元素都是一个null引用并且必须将数组的每个元素分别初始化。注意:尽管声明的格式允许方括号在变量名左边或者右边,但此种灵活性不适用于数组句法的其它方面。例如: new int 4是非法的。因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组。也就是说,twoDim的元素可按如下方式初始化:twoDim0 = new int 2twoDim1 = new int 4;twoDim2 = new int 6;

12、twoDim3 = new int 8;由于此种初始化的方法烦琐乏味,而且矩形数组的数组是最通用的形式,因而产生了一种”速记”方法来创建二维数组。例如:int twoDim = new int 45;可被用来创建一个每个数组有5个整数类型的4个数组的数组。数组界限在Java编程语言中,所有数组的下标都从0开始。 一个数组中元素的数量存储在length属性中; 这个值被用来检查所有运行时访问的界限。如果发生了一个越出界限的访问,那么运行时的报错也就出现了。使用length属性的例子如下:int list = new int 10;for (int i= 0; i list.length; i+)

13、System.out.println(listi);使用length属性使得程序的维护变得更简单。例4存放java班,c+班,j2me班,嵌入式班四个班学生的名字,并打印出来。public class TestFourClass public static void main(String args) / 声明4个空间大小,类型是String数组的数组 String stu = new String4; / 初始化java班的6个人 stu0 = new String6; for (int i = 0; i stu0.length; i+) stu0i = java + (i + 1); /

14、初始化c+班的3个人 stu1 = new String3; for (int i = 0; i stu1.length; i+) stu1i = c+ + (i + 1); / 初始化j2me班的5个人 stu2 = new String5; for (int i = 0; i stu2.length; i+) stu2i = j2me + (i + 1); / 初始化潜入式班的4个人 stu3 = new String4; for (int i = 0; i stu3.length; i+) stu3i = 嵌入式 + (i + 1); / 打印各个班级的名单 for (int i = 0

15、; i stu.length; i+) switch (i) case 0: System.out.println(java班:); break; case 1: System.out.println(c+班:); break; case 2: System.out.println(j2me班:); break; case 3: System.out.println(嵌入式班:); System.out.print( ); for (int j = 0; j stui.length; j+) System.out.print(stuij + ); System.out.println(); 运

16、行的结果如下:拷贝数组数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组:int myArray = new int 6;myArray = new int 10;在这种情况下,第一个数组被丢弃,除非对它的其它引用保留在其它地方。Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用:int myArray = 1, 2, 3, 4, 5, 6 ; / 原始数组int hold = 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ; / 新的更大的数组 System.arra

17、ycopy(myArray, 0, hold, 0, myArray.length); / 从没有Array拷贝所有元素到hold,从下标0开始这时,数组hold有如下内容:1,2,3,4,5,6,4,3,2,1。注意:如果数组保存的是基本类型的话直接把值拷贝过来。如果数组存放的是引用类型(类类型,数组类型(多维数组的拷贝)等),那么拷贝的是引用类型的地址,请看下面的例子:例5class AA int i; public AA(int ii) i = ii; public class TestArrayCopy public static void main(String args) / 声明

18、数组并初始化,源数组 AA str1 = new AA new AA(1), new AA(2), new AA(3), new AA(4) ; / 拷贝的目的数组 AA str2 = new AAstr1.length; / 完全拷贝,array方法参数的介绍看api System.arraycopy(str1, 0, str2, 0, str1.length); / 改变目的数组 str21.i = 5; / 打印原始数组,如果没有改变说明是两个数组 for (int i = 0; i str1.length; i+) System.out.print(str1i.i + ); 输出的结果

19、如下:显然,数组发生了改变,也就是经过拷贝操作后,原始的数组和新拷贝的数组没有分离,因为所拷贝的将是元素的引用。对于多维数组,由于数组本身是引用类型,所以其拷贝特性与引用类型数组相同。例6public class TestMutipleDemensionArrayCopy public static void main(String args) / 定义数组的数组 int source = new int5; / 定义目的数组 int target1 = new int5; int target2 = new int5; / 给源数组赋值 for (int i = 0; i 5; i+) so

20、urcei = new inti + 1; / int temp=i; for (int j = 0; j sourcei.length; j+) sourceij = j + 1; / 打印源数组的数据 System.out.println(-源数据-); for (int i = 0; i source.length; i+) for (int j = 0; j sourcei.length; j+) System.out.print(sourceij + ); System.out.println(); / 数组的拷贝(浅拷贝) System.arraycopy(source, 0, t

21、arget1, 0, source.length); / 改变目的1数组的值 target110 = 100; / 打印源数组的信息,可以看到值改变,说明没有深拷贝 System.out.println(-浅拷贝后输出-); for (int i = 0; i source.length; i+) for (int j = 0; j sourcei.length; j+) System.out.print(sourceij + ); System.out.println(); / 数组的深拷贝,先拷贝”第一维“的 System.arraycopy(source, 0, target2, 0,

22、source.length); / 再深拷贝 for (int i = 0; i 5; i+) target2i = new inti + 1; System.arraycopy(sourcei, 0, target2i, 0, i + 1); / 改变目的2数组的数据 target210 = 999; / 打印源数组的信息,可以看到值没有改变,说明是深拷贝 System.out.println(-深拷贝后输出未把100改成999-); for (int i = 0; i source.length; i+) for (int j = 0; j sourcei.length; j+) Syst

23、em.out.print(sourceij + ); System.out.println(); 输出的结果如下:内容总结 数组是某种数据类型的集合 数组使用new操作符初始化 数组长度具有不可变性 数组初始化后其每个元素得到缺省值 可以使用System.arraycopy方法对数组进行拷贝,数组拷贝时对其元素进行浅拷贝,对于引用类型元素将只按照引用方式拷贝。独立实践1.基本数组的使用1) 创建一个称作BasicArray的类,在.main()方法中声明两个变量,一个是thisArray,另一个是thatArray,它们应属类型array of int。2) 创建一个数组,它有10个int值,

24、范围从1至10。分配这个第三数组的引用给变量thisArray。3) 使用for()循环打印thisArray的所有值。如何控制循环的次数?4) 编译并运行程序。多少值被打印?这些值是什么?5) 对每个thisArray的元素,建立它的值为索引值的阶乘。打印数组的值。6) 编译并运行程序。7) 分配thisArray的引用给变量thatArray。打印thatArray的所有元素。8) 编译并运行程序。tyatArray的多少值被显示?这些值是什么?它们来自何处。9) 修改thisArray的某些元素,打印thatArray的值。10) 编译并运行程序;在thatArray的值中,你注意到了什

25、么?11) 创建一个有20个int值的数组。分配新数组的引用给变量thatArray,打印thatArray的值。12) 编译并运行程序。每个数组有多少值被显示? 这些值是什么?13) 拷贝thisArray的值给thatArray。你将使用什么方法调用? 你将如何限制拷贝元素的数量? thatArray的元素10至19有什么变化?14) 打印thatArray的值。15) 编译并运行程序。你所显示的值都是正确的吗?如果不是,你知道有那些内容理解得不对吗?16) 改变thatArray的某些值;打印thisArray和thatArray。17) 编译并运行程序。这些值是你所期待的吗?2,数组的

26、数组1) 创建一个称作Array2D的类,在main()方法中声明一个称作twoD的变量,它应属类型array of array of int。2) 创建一个元素类型为int的数组,该数组应包括4个元素并被赋值到变量twoD的elements0。3) 编写两个嵌套for()循环语句以打印twoD的全部值。以矩阵的格式安排输出 (可采用System.out.print()方法)。4) 编译并运行程序。 你应该能发现此时出现了运行错误(空指针异常) ,这是因为twoD的elements1 至 3未被初始化。5) 分别创建包括5个、6个和7个元素的int数组,将这些数组的引用分别赋予twoD的elements 1,2和3;确认完成上述操作的代码是在第3步所描述的嵌套for()循环之前插入的。6) 编译并运行程序。这次你应该看到一个零值的非矩形布局。7) 赋予twoD数组的每个元素一个明显的非零值(提示:使用Math.random() 以获得随机值)。8) 声明一个属类型array of int的称作oneD的变量。然后, 创建一个包括4个元素的int数组。将该数组的引用分别赋予数组array twoD和oneD的第一个元素。赋值后,打印oneD和twoD数组。 9) 编译并运行程序。请注意通过打印oneD的值而显示的单个数组与twoD数组的元素是相同的。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1