




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5讲数组 数组 一 声明一维数组 声明一个一维数组的一般形式为 类型数组名 或类型 数组名 相同类型的组数据对象 数组是对象 声明原始或类的类型的数组 chars Pointp char s Point p 数组的声明创建了一个引用的空间 实际的内存分配由new语句或数组初始化程序动态完成 与其他高级语言不同 Java在数组声明时并不为数组分配存储空间 因此 在声明的 中不能指出数组中元素的个数 数组长度 必须经过初始化 分配存储空间创建数组后 才能访问数组的元素 当仅有数组声明 而未分配存储空间时 数组变量中只是一个值为null的空引用 指针 5 1数组的定义与引用 二 创建一维数组对象 1 数组初始化声明同时指定初始值 一维数组初始化的形式如下 类型数组名 元素1 元素2 基本类型和字符串类型等可以用这种方式创建数组空间 例如 intia 1 2 3 4 5 doubleda 1 1 2 2 3 3 Stringsa Java BASIC FORTRAN 在数组声明时 用大括号给出数组元素的初值 系统将自动按照所给初值的个数计算出数组的长度并分配存储空间 2 使用new运算符若数组已经声明 为已声明数组分配空间的一般形式如下 数组名 new类型 数组大小 若数组未声明 在声明的同时用new为数组分配空间 类型数组名 new类型 数组大小 三 数组的引用一维数组的引用分为数组元素的引用和数组的引用 大部分时候都是数组元素的引用 一维数组元素的引用方式为 数组名 下标 其中 下标是int类型的 也可以是byte short char等类型 但不允许为long类型 下标的取值从0开始 直到数组的长度减1 元素的引用与同类型的变量相同 每一个数组元素都可以用在同类变量被使用的地方 Java对数组元素要进行越界检查以保证安全性 若数组元素下标越界将产生下面的异常 ArrayIndexOutOfBoundsException对于每个数组都有一个指明数组长度的属性length 它与数组的类型无关 publicvoidprintElements int list for inti 0 i list length i System out println list i publicchar createArray char s s newchar 26 for inti 0 i 26 i s i char A i returns 堆内存中数组 四 复合类型数组元素的动态空间分配和初始化复合类型的数组需要进一步对数组元素用new运算符分配空间分配并初始化操作 设已声明一个引用类型的数组 类型数组名 对数组的动态空间分配步骤如下 1 为数组分配每个元素的引用空间数组名 new类型 数组大小 2 为每个数组元素分配空间 参数表用于指定数组元素初值 数组名 0 new类型 参数表 数组名 数组大小 1 new类型 参数表 创建引用数组 以下代码段创建10次引用类型Point 假设该类有两个属性 x和y 有构造器 的数组 publicPoint createArray Point p p newPoint 10 for inti 0 i 10 i p i newPoint i i 1 returnp 创建具有Point对象的原始字符的数组 多维数组 五 多维数组 多维数组是一个数组的数组 声明二维数组的一般形式为 类型数组名 或类型 数组名 或类型 数组名 类型 可以是简单类型 也可以是引用类型 1 二维数组的初始化二维数组的初始化也是在声明数组的同时就为数组元素指定初值 例如 intia2 1 2 3 4 5 6 7 Java系统将根据初始化时给出的初始值的个数自动计算出数组每一维的大小 在这个例子中 二维数组ia2由三个一维数组组成 这三个一维数组的元素个数分别为2 2 3 在Java语言中 由于把二维数组看作是数组的数组 数组空间不一定连续分配 所以不要求二维数组每一维的大小相同 2 使用new运算符例如 int twoDim newint 4 twoDim 0 newint 5 twoDim 1 newint 5 第一次调用new创建一个对象 即包含四个元素的数组 每个元素是对int的类型数组元素的空引用 每个元素必须分别被初始化 使每个元素指向其数组 多维数组的引用 类似一维数组 所有数组下标从0开始 元素个数减1截止 增强的循环 六 foreach语句Java2平台标准版本 J2SE 版本5 0已引入对数组迭代的增强的for循环 publicvoidprintElements int list for intelement list System out println element for循环可像列表中的每个元素一样被读取 foreach并不是一个关键字 习惯上将这种特殊的for语句格式称之为 foreach 语句 也即 for每一个 的意思 foreach的语句格式 for 元素类型t元素变量x 遍历对象obj 引用了x的java语句 不能对数组重新调整大小 可使用相同的引用变量来引用整个新的数组 如 int myArray newint 6 myArray newint 10 但是要尽量防止该情况的出现 因为 第一个数组有效地丢失 除非对其的另一个引用在别处得以保留 5 2数组作为方法参数和返回值 在Java语言中 数组可用为方法参数和方法的返回值 因为数组是引用类型 数组变量存储的是数组存储区的引用 所以 传送数组或返回数组实际上在传送引用 在这个意义上来说 即使实际参数和形式参数数组变量名不同 但因为它们是相同的引用 若在被调方法中 改变了形参数组 则该形参对应的实参数组也将发生变化 1 数组作为方法参数classArrayArgument publicstaticvoidmain Stringargs intx 11 12 13 14 15 display x change x display x publicstaticvoidchange intx for inti 0 i x length i x i x i 10 publicstaticvoiddisplay intx for ints x System out print s System out println 程序运行结果如下 11121314152122232425 2 可变参数若在程序中 需要将调用方法中一组个数不定的数据单向传送给被调方法 可采用Java语言提供的可变参数个数的方法调用格式定义方法 并用更直观自然的方式在调用方法中进行数据传送 可变参数个数的方法参数定义格式可见下面的例子 例 对一组数据进行求和计算 classVarPara publicstaticvoidmain Stringargs add 10 20 30 40 50 60 70 80 90 参数个数可变 staticvoidadd int s 参数个数可变的方法intsum 0 for inti s sum i System out print sum 运行结果为 450 需注意的是 若方法的参数既有固定部分和又有参数个数可变部分 则参数个数的可变部分应置于参数表的最后 若改为add 10 20 30 40 50 结果如何 程序运行结果如下 b 0 10 0b 1 9 8b 2 1 1749999999999998 3 函数返回数组编写一个方法 求一组数的最大值 最小值和平均值 该方法要将求出的最大值 最小值和平均值多个值作为结果返回 可将它们存储到一个数组中 再用return返回 classReturnArray publicstaticvoidmain Stringargs doublea 1 1 3 4 9 8 10 doubleb max min ave a for inti 0 ia i min a i sum a i res 0 max res 1 min res 2 sum a length returnres 5 3数组操作的常用方法 在Java语言中 提供了一些对数组进行操作的类和方法 掌握它们的用法 可方便数组程序的设计 1 System类的静态方法arraycopy 系统类System的静态方法arraycopy 可用来进行数组复制 其格式和功能如下 publicstaticvoidarraycopy Objectsrc intsrc position Objectdst intdst position intlength 从源数组src的src position处 复制到目标数组dst的dst position处 复制长度为length 例如 intmyarray 1 2 3 4 5 6 originalarrayinthold 10 9 8 7 6 5 4 3 2 1 newlargerarraySystem arraycopy myarray 0 hold 0 myarray length 数组包含的内容为 1 2 3 4 5 6 4 3 2 1 System arraycopy 方法处理对象数组时复制引用 而非对象 2 Arrays类中的方法java util Arrays类中提供了对数组排序sort 二分查找binarySearch等静态方法 1 voidsort Object a sort 方法有重载 以适应对不同类型数组a的升序排序 注 Java未提供降序方法 需自己实现 例 使用sort方法对一整型数组递增排序 importjava util publicclassArraySort publicstaticvoidmain Stringargs inta 8 6 7 3 5 4 i Arrays sort a for ints a System out print s System out println 程序运行结果为 345678 2 intbinarySearch Object a Objectkey binarySearch 方法有重载 以适应对不同类型已排序数组a的二分key查找 对于上述形式的方法 若找到 则返回找到元素的位置 若没有找到 则返回一个负值 key应该插入的对应位置 1 例 binarySearch 方法的使用 importjava util publicclassBinarySearch publicstaticvoidmain Stringargs inta 3 4 5 6 7 8 i i Arrays binarySearch a 6 System out println i 程序的运行结果为 3 异
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 慢性病护理科普知识
- 营销费用补贴协议书
- 养生官合作投资协议书
- 环保供应商管理体系构建
- 酒驾醉驾安全培训
- 银行食堂采购协议书
- 车位转让合同协议书
- 进口小麦转让协议书
- 车辆转卖合同协议书
- 部门年度绩效协议书
- 湖北省武汉市2025届高三年级五月模拟训练试题数学试题及答案(武汉五调)
- 医师挂证免责协议书
- 济南民政离婚协议书
- 2025年内蒙古自治区初中学业水平考试数学模拟试题 (一)(含答案)
- 四川省(科大讯飞大数据)2025届高三第二次教学质量联合测评生物试题及答案
- 《绿色建筑施工培训课件》资料
- GA 1812.3-2024银行系统反恐怖防范要求第3部分:印钞造币企业
- 【公开课】+滑轮-人教版(2024)初中物理八年级下册
- 房屋市政工程生产安全重大事故隐患排查清单
- 2025年高考语文备考之近五年(2020-2024)语用题汇编:表达效果类真题+答案详解+思路六步走
- (四调)武汉市2025届高中毕业生四月调研考试 语文试卷(含答案详解)
评论
0/150
提交评论