版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1数组的基本概念
数组(array)是由相同类型的变量组成的集合。在一个数组中,每一个元素的数据类型都是相同的,可以使用共同的名字引用它。数组可被定义为任何类型,可以是一维或多维。并且数组具有固定的长度,一经创建,长度就不再发生变化。数组是具有相同类型数据的一组变量,这样的变量称为元素或成员。数组中的元素可以是基本数据类型,也可以是对象类型的。要指向数组中的特定元素,需要指定数组的引用名及该元素在数组中的位置序号。元素在数组中的位置序号称为元素的下标或索引。下一页返回5.1数组的基本概念
图5-1所示是一个整数类型的数组,它包含了8个整数类型的元素。数组中元素的总个数称为数组的长度,因此图中所示数组C的长度为8。数组的下标从0开始,每个数组的第一个元素的下标为0,有时称这个元素为数组的第零个元素。数组C中最大的下标为7,比数组长度小1。把数组看作一组相同数据类型的变量的集合,用数组访问表达式来访问数组中的元素,数组访问表达式由数组名加上方括号“[]”括起来的数组下标组成,表示访问该数组中位置为该数组下标的元素。例如,在图5-1中,数组C的8个元素的访问表达式分别为C[0],C[1],C[2],…,C[7],其中C[0]的值为11,C[1]的值为23,C[2]的值为45,C[7]的值为876。上一页下一页返回5.1数组的基本概念
数组访问表达式可直接作为一个变量参与程序的运算,例如,要计算数组C中前三个元素之和,并将结果保存在变量sum中,可以写成那么sum的值将等于79。上一页返回5.2一维数组5.2.1一维数组的声明与创建要创建一个数组,必须首先定义数组变量所需的类型。通用的一维数组的声明格式是:其中,type定义了数组的基本类型。基本类型决定了组成数组的每一个基本元素的数据类型。这样,数组的基本类型决定了数组存储的数据类型。例如,下面的例子定义了数据类型为int,名为month_days的数组。返回下一页5.2一维数组尽管该例子定义了month_days是一个数组变量的事实,但实际上没有数组变量存在。事实上,month_days的值被设置为空,它代表一个数组没有值。为了使数组month_days成为实际的、物理上存在的整型数组,必须用运算符new来为其分配地址并且把它赋给month_days。运算符new是专门用来分配内存的运算符。将在后面章节中更进一步了解运算符new,但是现在需要使用它来为数组分配内存。当运算符new被应用到一维数组时,它的一般形式如下:下一页返回上一页5.2一维数组其中,type指定被分配的数据类型,size指定数组中变量的个数,array-var是被链接到数组的数组变量。也就是说,使用运算符new来分配数组,必须指定数组元素的类型和数组元素的个数。用运算符new分配数组后,数组中的元素将会被自动初始化为零。下面的例子分配了一个12个整型元素的数组并把它们和数组month_days链接起来。通过这个语句的执行,数组month_days将会指向12个整数,并且数组中的所有元素将被初始化为零。回顾一下上面的过程:定义一个数组需要两步。第一步,必须定义变量所需的类型。第二步,必须使用运算符new来为数组所要存储的数据分配内存,并把它们分配给数组变量。这样Java中的数组被动态地分配了。综上所述,下面程序定义的数组存储了每月的天数。上一页下一页返回5.2一维数组【程序5.1】当运行这个程序时,它打印出4月份的天数。如前面提到的,Java数组下标从零开始,因此4月份的天数数组元素为month_days[3]或30。将对数组变量的声明和对数组本身的分配结合起来是可以的,如下所示:上一页下一页返回5.2一维数组这将是通常所见的编写Java程序的专业做法。数组可以在声明时被初始化。这个过程和简单类型初始化的过程一样。数组的初始化(arrayinitializer)就是包括在花括号之内用逗号分开的表达式的列表。逗号分开了数组元素的值。Java会自动地分配一个足够大的空间来保存指定的初始化元素的个数,而不必使用运算符new。例如,为了存储每月中的天数,下面的程序定义了一个初始化的整数数组:【程序5.2】当运行这个程序时,会看到它和前一个程序产生的输出一样。上一页下一页返回5.2一维数组5.2.2一维数组的使用由于数组可能拥有大量的元素,那么就不应该像使用普通变量一样,逐句地进行赋值或引用。因此,在对数组的使用中,通常需要结合循环语句来对数组进行操作,下面将通过一个例子探讨如何使用循环来使用数组。这个例子运用一维数组来计算一组数字的平均数。【程序5.3】上一页下一页返回5.2一维数组在程序5.3这个例子中,声明了一个名字为nums的双精度浮点型数组,并为它进行了初始化,使它拥有了5个双精度浮点型的元素。接下来程序利用一个for循环,将数组中的每一个元素依次相加,并求得了平均数。在for循环中,将i作为数组下标定义数组访问表达式,通过循环变量i的递增,顺序地访问到了每一个数组元素。这种顺序将数组元素访问一次,且仅访问一次,称为对数组的遍历。Java会严格地检查,以保证不会意外地去存储或引用在数组范围以外的值。Java的运行系统会检查以确保所有的数组下标都在正确的范围以内。例如,运行系统将检查数组month_days的每个下标的值,以保证它包括在0和11之间。如果企图访问数组边界以外(负数或比数组边界大)的元素,将引起异常。例如,在上个程序中,如果循环变量i的值大于40或等于5,那么程序将引发异常。上一页下一页返回5.2一维数组除了用for循环遍历数组外,也可以使用while循环来遍历数组,只要能使循环变量递增,并保证循环变量不大于数组长度,就可以正常地使用数组了。在J2SE5.0及以上版本中,为了更加方便地使用数组,提供了一种不用循环变量就可以实现对数组的访问的语句,称为增强for语句。它的语法是:上一页下一页返回5.2一维数组如上例中的程序可以修改为:【程序5.4】在程序5.4中,使用增强for语句实现对数组nums的访问,doublenumber表示定义一个类型为double的变量number,增强for语句自动将每一次循环后数组nums的元素赋值给number,也就是说,在每一次循环后,number就是数组中的元素。增强for语句由于取消了循环变量的设置,改由Java自动循环,避免了数组下标越界的发生,同时也简化了程序语句的表达。上一页下一页返回5.3二维数组5.3.1二维数组的声明与创建二维数组实际上是数组的数组。定义二维数组变量,要将每个维数放在它们各自的方括号中。例如,下面语句就定义了一个名为twoD的二维数组变量。该语句分配了一个4行5列的数组并把它分配给数组twoD。实际上,这个矩阵表示了int类型的数组的数组被实现的过程。在概念上,这个数组可以用图5-2来表示。上一页下一页返回5.3二维数组下列程序从左到右、从上到下为数组的每个元素赋值,然后显示数组的值:【程序5.5】上一页下一页返回5.3二维数组5.3.2二维数组的使用二维数组元素的访问及输出与一维数组一样,只是多了一个下标而已。在循环输出时,需要再内嵌一个循环,即双重循环来输出二维数组中的每一个元素。下面来展示一个例子,把上面学过的知识一起使用。这里使用列数不相等的二维数组作为例子,实现功能是输出二维数组中的每一行的数字。【程序5.6】上一页返回5.4Java中的Arrays类Java中的Arrays类是一个实现对数组操作的工具类,包括了各种各样的静态方法,可以实现数组的排序和查找、数组的比较和对数组增加元素、数组的复制和将数组转换成字符串等功能。1.对数组进行排序使用Arrays类对数组进行排序时,可以使用Arrays类中的sort()方法对整个数组或部分数组进行排序,下面的例子对数值类型的数组进行排序:程序执行排序后的最后结果为:[1,5,6,7,9,25,31,78],默认是升序排列。下一页返回5.4Java中的Arrays类2.查询数组当需要在数组中查询某一个关键字时,可以使用二分查找法(binarySearch方法)。数组必须是按升序排列好的,如果数组中不存在关键字,方法将会返回插入点。例如,下面的例子在数组中查找关键字:上面这些代码输出的结果是:上一页下一页返回5.4Java中的Arrays类注意:第二个输出是−5,如果在数组中不存在关键字,方法将会返回插入点。“插入点”是指第一个大于查找对象的元素在数组中的位置,如果数组中所有的元素值都小于要查找的对象,“插入点”就等于Arrays.size()。3.比较两个数组值是否相等可以采用equals()方法检测两个数组是否相等,如果它们的内容相同,将会返回true;否则返回false。请看下面的例子:上一页下一页返回5.4Java中的Arrays类上面这些代码输出的结果是:程序实作题1.给定一个整型数组{13,15,4,8,15,6,9,21},并输入一个整数,请编写程序,在数组中查找该整数,如果存在,则返回该整数在数组中的位置(下标);如果不存在,则返回−1。例如:输入15,返回1;输入14,返回−1。2.用一个数组模拟在盒子中放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年外语教师招聘考试模拟题
- 2026年不动产登记代理人考试模拟试卷及答案
- 儿科肺炎护理中的心理干预
- 2026年教师资格证笔试宝典
- 头部护理的产品研发与趋势
- 妇产科护理学基础护理效果
- 基础护理操作的技术创新
- 2026年幼儿园音乐活动常规培养
- 2026年幼儿园大班绘本跑跑镇
- 2026年幼儿园请你吃薯片
- 云南省曲靖一中2026届高三年级教学质量检测(七)语文+答案
- 2025年浙江宁波市慈溪市国有企业招聘工作人员面谈笔试历年常考点试题专练附带答案详解
- 2026来凤同风建筑工程有限责任公司招聘项目经理等工作人员2人笔试备考试题及答案解析
- 2026年事业单位面试中的公基热点预测
- 2026年湖南省安全员-C2证题库(附答案)
- 2026智能工厂梯度培育行动专项申报解读及建设方案
- 2026届西藏自治区拉萨市高三下学期第二次联考数学试卷(解析版)
- 2026届浙江省杭州市高三二模英语试题(含答案和音频)
- 小学奥数几何模块-等高模型、等积变形、一半模型
- 心律失常PPT医学课件
- 2023【画室装修】护墙板包工合同范本正规范本(通用版)
评论
0/150
提交评论