《java语言程序设计5数组定义与使用》由会员分享,可在线阅读,更多相关《java语言程序设计5数组定义与使用(58页珍藏版)》请在金锄头文库上搜索。
1、第5章 数组 在实际应用中 经常需要处理具有相同性质的一批数据 为此 在Java中还引入了数组 即用一个变量表示一组相同性质的数据 5 1一维数组5 2多维数组5 3数组的基本操作5 4数组应用举例5 5数组参数5 6字符串 5 1一维数组 数组是用一个变量名表示一组数据 每个数据称为数组元素 每个元素通过下标来区分 如果用一个下标能确定数组中的不同元素 这种数组称为一维数组 1一维数组的声明 一维数组声明的格式为 类型标识符数组名 或类型标识符 数组名类型标识符指定每个元素的数据类型 例如 要表示学生的成绩 整数 可以声明数组score intscore 该声明表示数组的名字为score 每
2、个元素为整数 要表示学生的体重 浮点数 可以声明元素的数据类型为float的数组weight 其声明如下 float weight 2一维数组的初始化 要让系统为数组分配存储空间 必须指出数组元素的个数 该工作在数组初始化时进行 用new初始化数组先声明数组再初始化数组名 new类型标识符 元素个数 元素个数通过整型常量来表示 要表示10个学生的成绩 整数 可以先声明元素的数据类型为int的数组score 再用new运算符初始化该数组 intscore score newint 10 数组中各元素通过下标来区分 下标的最小值为0 最大值比元素个数少1 score的10个元素分别为score 0
3、 score 1 score 2 score 3 score 9 系统为该数组的10个元素分配存储空间 形式如下表所示 例 要计算100个学生的平均成绩 可以使用以下的程序段 floatsum inti intscore score newint 100 输入数组各元素的值 sum 0 for i 0 i 100 i sum sum score i sum sum 100 声明的同时进行初始化可以用1条语句声明并初始化数组 即将上面的2条语句合并为一条语句 其格式如下 类型标识符数组名 new类型标识符 元素个数 或类型标识符 数组名 new类型标识符 元素个数 例如 要表示10个学生的学号
4、可以按以下方式声明并初始化数组no intno newint 10 赋初值初始化数组可以在声明数组的同时 给数组元素赋初值 所赋初值的个数决定数组元素的数目 其格式如下 类型标识符数组名 初值表 初值表是用逗号隔开的初始值 例如 intscore 65 34 78 81 56 92 56 87 90 77 5 2多维数组 1二维数组的声明二维数组的声明方式与一维数组类似 只是要给出两对方括号 二维数组声明形式如下 类型标识符数组名 或类型标识符 数组名例如 要表示每个数据为整型数的行列式 可以声明如下二维数组 inta 2二维数组的初始化 用new初始化二维数组先声明数组再初始化数组名 new
5、类型标识符 行数 列数 例如 inta a newint 3 4 声明的同时进行初始化类型标识符数组名 new类型标识符 行数 列数 或类型标识符 数组名 new类型标识符 行数 列数 inta newint 3 4 数组中各元素通过两个下标来区分 每个下标的最小值为0 最大值分别比行数或列数少1 a的12个元素分别为a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 2 3 系统为该数组a的12个元素分配存储空间 形式如表所示 赋初值初始化数组其格式如下 类型标识符数组名 初值表 初值表 初值表 intgrade 65 34 78 81 56 92 56 87 90
6、92 69 75 数组grade共有12个元素 元素grade 0 0 grade 0 1 grade 0 2 grade 1 0 grade 3 2 的初始值分别为65 34 78 75 如表所示 5 3数组的基本操作 数组的引用对数组的应用通常是对其元素的引用 intage newint 3 age 0 25 age 2 2 age 0 数组的复制inta newint 6 intb 1 2 3 4 5 6 for inti 0 i 6 i a i b i 或a b 例 数组复制 intc d e i j c newint 3 3 d newint 3 3 e newint 3 3 for
7、 i 0 i 3 i for j 0 j 3 j d i j i j c i j d i j e d 数组的输出数组的输出通常是逐个元素结合循环语句实现的 inta newint 6 for inti 0 i 6 i a i i System out println a i 例 一维数组的复制 classArrayC publicstaticvoidmain String args inta b i j a newint 3 b newint 5 System out println a length a length for i 0 i a length i a i i System out
8、 print a i System out println System out println Beforearrayassignment System out println b length b length for j 0 j b length j b j j 10 System out print b j System out println b a System out println Afterarrayassignment System out println b length b length for j 0 j b length j System out print b j
9、 System out println 程序运行结果如下 a length 3012Beforearrayassignmentb length 5010203040Afterarrayassignmentb length 3012 例 二维数组的复制 classArrayC2 publicstaticvoidmain String args intc d i j c newint 2 2 d newint 3 3 System out println Arrayd for i 0 i d length i for j 0 j d i length j d i j i j System out
10、print d i j System out println c d System out println Arrayc for i 0 i c length i for j 0 j c i length j System out print c i j System out println 程序运行结果如下 Arrayd012123234Arrayc012123234 5 4数组应用举例 例排序排序是将一组数按照递增或递减的顺序排列 排序的方法很多 其中最基本的是选择法 此处介绍选择法排序 其基本思想如下 对于给定的n个数 从中选出最小 大 的数 与第1个数交换位置 便将最小 大 的数置于第
11、1个位置 对于除第1个数外的剩下的n 1个数 重复步骤1 将次小 大 的数置于第2个位置 对于剩下的n 2 n 3 n n 2个数用同样的方法 分别将第3个最小 大 数置于第3位置 第4个最小 大 数置于第4位置 第n 1个最小 大 数置于第n 1位置 假定有7个数 7 4 0 6 2 5 1 根据该思想 对其按照递增顺序排列 需要进行6轮选择和交换过程 第1轮 7个数中 最小数是0 与第1个数7交换位置 结果为 0476251第2轮 剩下的6个数中 最小数是1 与第2个数4交换位置 结果为 0176254第3轮 剩下的5个数中 最小数是2 与第3个数7交换位置 结果为 0126754 第4轮
12、 剩下的4个数中 最小数是4 与第4个数6交换位置 结果为 0124756第5轮 剩下的3个数中 最小数是5 与第5个数7交换位置 结果为 0124576第6轮 剩下的2个数中 最小数是6 与第6个数7交换位置 结果为 0124567可见 对于n个待排序的数 要进行n 1轮的选择和交换过程 其中第i轮的选择和交换过程中 要进行n i次的比较 方能选择出该轮中最小 大 的数 importjava io classArraySort publicstaticvoidmain String args throwsIOException BufferedReaderkeyin newBufferedR
13、eader newInputStreamReader System in inta i j k temp Stringc System out println Inputthenumberofarrayelements 例 排序 例排序 续 c keyin readLine temp Integer parseInt c a newint temp System out println Input temp numbers Oneperline for i 0 i a length i c keyin readLine a i Integer parseInt c System out pri
14、ntln Aftersorting for i 0 i a length 1 i k i for j i 1 j a length j if a j a k k j temp a i a i a k a k temp for i 0 i a length i System out println a i 例 矩阵运算 数学中的矩阵在Java中用二维数组实现 本例中要进行矩阵的加 乘运算 classArrayC3 publicstaticvoidmain String args intc 1 2 3 4 5 6 7 8 9 intd 2 2 2 1 1 1 3 3 3 inti j k inte
15、 newint 3 3 System out println Arrayc for i 0 i c length i for j 0 j c i length j System out print c i j System out println System out println Arrayd for i 0 i d length i for j 0 j d i length j System out print d i j System out println System out println Arrayc d for i 0 i e length i for j 0 j e i l
16、ength j e i j c i j d i j System out print e i j System out println System out println Arrayc d for i 0 i 3 i for j 0 j 3 j e i j 0 for k 0 k 3 k e i j e i j c i k d k j System out print e i j System out println 程序运行结果如下 Arrayc123456789Arrayd222111333 Arrayc d345567101112Arrayc d121212212121303030 5 5数组参数 在java的过程中 允许参数是数组 在使用数组参数时 应该注意以下事项 在形式参数表中 数组名后的括号不能省略 括号个数和数组的维数相等 不需给出数组元素的个数 在实际参数表中 数组名后不需括号 数组名做实际参数时 传递的是地址 而不是值 即形式参数和实际参数具有相同的存储单元 例 计算数组元素平均值 classArrayC4 publicstaticvoidmain String