




免费预览已结束,剩余28页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 数 组,3.1 一维数组 3.2 二维数组,3.1 一 维 数 组,一维数组是最简单的数组,在java中,数组是作为数组类的一个实例来处理的,故可以用new运算符来建立一个数组。由于数组中每一个元素都作为一个单独的对象来考虑,因而必须逐一建立,所以定义的时候,我们必须显式或隐含地指明数组中对象的数目。下面我们分声明和引用两部分来进行介绍。,3.1.1 一维数组的声明和初始化 数组变量在使用之前要事先声明,其数组元素的类型可分为三类,第一类是java的基本数据类型;第二类是java类和接口类型(引用类型);第三类是数组类型。其一般定义格式如下: array_type array_name ; 或 array_type array_name;,上面两种定义方式完全等价。对c/c+熟悉的读者应该对第一种定义方式并不陌生。例如: int array1 ; object array2; 上面所给的例子只是简单的变量声明,并没有给数组分配内存空间。我们在使用数组前还必须对其进行初始化(即为其分配内存空间)。给数组元素分配内存并为数组元素赋初值的过程称为数组初始化。初始化可分为动态初始化和静态初始化。,1静态初始化 当数组元素的初始化值直接由括在大括号“ ”之间的数据给出时,就称为静态初始化。该方法适用于数组的元素不多且初始元素有限时。静态初始化往往和声明结合在一起使用,其格式如下: array_type array_name=element1, element2;,其中,array_type为数组元素的类型;array_name为数组名;element1、element2为array_type类型的数组元素初值;方括号“ ”表示可选项。例如: int factorial = 1,2,3,4,5,6,7,8; char ch=a,a,b,b,c,c; double f =12,45.12,88.123;,2动态初始化 与静态初始化不同,动态初始化先用new操作符为数组分配内存,然后才为每一个元素赋初值。其一般格式如下: array_name = new array_type arraysize; 其中,array_name是已定义的数组名;array_type为数组元素的数据类型,必须与定义时给出的数据类型保持一致;arraysize为数组的长度,它可为整型变量或常量。例如:,. int series = new int4; for (int i=0;i4;i+) series i =i*3; .,3.1.2 一维数组的引用 当有了数组的声明和初始化后,与c/c+相同,就可以在程序中引用数组的元素了。数组元素的引用是通过数组名和下标值来进行的,其一般格式如下: array_name arrayindex 其中,array_name为数组名,arrayindex为数组元素的下标。数组的下标是一个int类型数,也可以使用与int类型进行自动类型转换的类型,如short、byte、char类型(使用时转换成int类型),但下标不能是long类型的数。如果非得用long类型的数定义数组的下标,则须强制转换。,比如: . short i; byte j; long k; int array1 i,array2j; / no error int array3k; / error int array4 (int) k; / its ok .,在java语言中,数组下标从0开始,到数组长度减1结束。任何数组都有公有变量length。我们除了可以在使用时显式指出数组长度之外,也可以使用length这一数组属性。它是只读变量,只可检测,不可赋值,因为数组一旦分配内存后,其长度就不再变化。 为了安全考虑,数组的存取在程序运行时实时检查,企图使用小于零或大于数组长度的下标都会引起越界异常(arrayindexoutofboundexception)(异常处理我们将在后面的章节中给出)。,例如: . int array1= new int 10; array1-1= 100; / error, out of bound. array1 10= 200; / error ,out of bound. . 下面我们给出一个完整的例子,作为本节的总结。,例3.1 public class timesheetdemo public static void main (string args) int days = dialogbox.requestint(“number of days worked“); int hours; hours = new int days; for (int i=0; idays; i+) hoursi = dialogbox.requestint(“hours on day “+(i+1); ,int salary = new int days; for (int i=0; idays; i+) if (hoursi = 8) salaryi = 15*hoursi; else salaryi = 8*15 + (hoursi-8)*20; transcript.println(“daythourstsalary“); for (int i=0; idays; i+) ,transcript.println(i+1)+“t“+hoursi+“t$“+salaryi); int totalhours = 0; int totalsalary=0; for (int i=0; idays; i+) totalhours = totalhours+hoursi; totalsalary = totalsalary+salaryi; transcript.println(“total hours: “+totalhours); transcript.println(“total salary: $“+totalsalary); ,本例的功能是对员工工作的天数、日薪、日工作时间等进行统计;当每天工作时间不超过8小时时,每小时的酬金为15元,如果超过8小时,在每小时15元的基础上再累加超工作量酬金;最后对工作天数、小时数、工资进行输出。当我们输入工作天数为5天,顺序的工作小时为9、5、11、8、4后,其输出结果如图3.1所示。,图 3.1,在该例中,类dialogbox、transcript是作者所提供的标准类,在附录中我们会给出。该程序是在jbuilder 3.0中运行并通过的。作者提供的标准类,须在jbuilder中的project菜单项中对properites属性进行设置。由于作者把标准类安装在e:packagesgenesis目录中,故须设置为如图3.2所示。今后例子中所用到的标准类,如无特别说明,均与此例相同。,图 3.2,3.2 二 维 数 组,我们在讨论一维数组的时候谈到,数组的元素类型可以为数组,即数组的嵌套,其实,多维数组可以看作是数组的数组。也就是说,多维数组中每个元素为一个低维数组,故多维数组的声明、初始化和引用与一维数组非常相似。由于多维数组中用得较多的还是二维数组,因而我们着重讨论二维数组的属性,其他高维数组可以以此类推。,3.2.1 二维数组的声明和初始化 与一维数组类似,二维数组声明的一般格式如下: array_type array_name ; 或 array_type array_name; 其中,array_type为数组元素类型,可以是任意的数据类型;array_name为数组名,可以是java中合法的标识符。上面的定义并没有为数组元素分配内存空间,因而必须经过初始化后才能使用。,例如: int array1 ; /定义一个整型二维数组 或 int array2; /同样定义一个二维整型数组 二维数组在实际的使用过程中也分为静态初始化和动态初始化两种。初始化的过程与一维数组相同,在此不多加理论说明,而只是以初始化实例来加以说明。,1静态初始化实例 . int number = 1,2,3,4,5,6; char ch = a, b,c, d,e, f; . 上例是在建立数组的同时用大括号中的值给它赋初值,得到了两个二维整型数组和二维字符数组。,2动态初始化实例 . int array_int =new int33; /定义数组并为其分配存储空间 long array_long=new long55; .,3.2.2 二维数组的引用 当我们对二维数组进行了初始化后,就可以在程序中引用数组的元素了。二维数组元素的引用是通过数组名和下标值来进行的,其一般格式如下: array_name arrayindex1 arrayindex2,其中,array_name为数组名;arrayindex1为数组元素的高维下标;arrayindex2为数组的低维下标。二维数组中,下标同样是一个int类型数,也可以使用与int类型进行自动类型转换的类型,如short、byte、char类型(使用时转换成int类型),但下标不能是long类型的数。如果非得用long类型的数定义数组的下标,则须强制转换。 熟悉c/c+的读者知道,在c/c+使用二维数组的时候,要求每一维的长度必须一致,例如在c中有如下的定义:int array 3;其对应的二维表如表3.1所示。,表3.1 c/c+中二维数组存储格式,在java中,却并不要求多维数组的每一维长度相同。例如,当在java有如下的定义: int array 3=new int3; 时,其对应的二维表如表3.2所示。,表3.2 java中二维数组存储格式,表3.2中并不要求n=m=k,实际应用中有可能nmk。 下面我们给出一个二维数组应用的实例。 例3.2 public class processingmarks /* processes students assessment marks. */ public static void main (string args) string course=“maths“,“english“,“computer“,“communication“;,int classsize = 8; int assessmentmarks = new int classsize4; / for each student for(int m=0;m4;m+) transcript.print(coursem+“t“); transcript.println(); for (int i=0; iclasssize; i+) / for each assessment,for (int i=0; iclasssize; i+) / for each assessment for (int j=0; j4; j+) assessmentmarksij= (int)(26*math.random(); transcrip
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市场营销调研面试技巧数据收集与分析模拟题及解析
- 2025年物资储备仓库规划与建设知识测试题库及答案
- 电.钳工安全知识培训
- 2025年人力资源经理应聘考试题库及答案解析
- 神经外科医生的日常工作
- 甲状腺肿瘤护理课件
- 甲状腺炎课件
- 用药预防用药程序课件
- 江苏南京2020-2024年中考满分作文64篇
- 用电应急安全知识培训课件
- 人民医院心血管外科临床技术操作规范2023版
- 2023年江苏小高考历史试卷
- 主要组织相容性复合体及其编码分子
- 优化物理教学策略的思考(黄恕伯)
- 中国移动-安全-L1,2,3(珍藏版)
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- scratch3.0编程校本课程
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 14825-1993农药可湿性粉剂悬浮率测定方法
- 固定资产清查工作报告
评论
0/150
提交评论