下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 六 讲,Java数组,2,目标,掌握Java数组的概念 掌握Java一维数组的使用 掌握Java二维数组的使用 掌握arraycopy()方法的使用 掌握clone()方法的使用 掌握java.util.Arrays类的使用,3,数组(Arrays),数组:是一群位置连续、且类型相同的数据的集合。即一个数组可以用来存储多个同类型的值 一个数组中虽然存储了多个值,但它只是一个变量,而不是多个变量 如何访问一个数组中存放的值: 数组元素(element):数组内每一个存放值的空间称为数组元素 通过“数组名索引(index)(或称下标)”的方式来标识和访问每一个数组元素 “索引”以中括号“”其内
2、加“索引值”的格式来表示。例如,“索引”若为10,“索引值”则为10,4,Java数组,Java数组是特殊的对象( Java数组继承自Object类),数组变量内只是存放一个数组对象的引用 Java数组的下标(索引值)从0开始编号 数组对象中除了数组元素之外,还包含有许多其它数据,例如,所有数组都有一个记录数组长度的length属性 Java数组由Java语言直接支持,所以在Java提供的内置类中,无法找到这种特殊的“数组”类 Java编程环境会自动检查数组下标是否越界,5,一维数组声明,定义:索引只有一个层级的数组 声明数组变量 语法:类型 数组变量名; “”表示声明的变量是一个数组变量,使
3、用一个“”表示该数组是一个一维数组 “类型”并不限于基本数据类型,它可以是任何一种类类型 声明一个数组变量不能使它被初始化 示例: Byte myarray; String mystr;,6,一维数组定义,定义数组变量并分配存储空间 语法: 类型 数组变量名=new 类型元素个数; 示例: double thearray = new double10; 当数组对象构造完成后,所有的数组元素会自动被初始化 若数组元素本身也是一个对象,它会被自动初始化为null 数组对象一旦构造完成后,其长度是固定的,不可更改 同一个数组变量可以改变引用的对象,而不管数组长度为何,7,一维数组的初始化 2-1,自
4、动赋值得到的0或null是无意义的,手动赋值可使数组元素得到有意义的初始数据 语法一: 数组变量名=new 类型 第一个元素值,第二个元素值,第N个元素值 大括号里面的元素个数决定数组的长度 示例: /创建数组对象myfloat,然后手动初始化,数组长度为3 float myfloat; myfloat=new float 192.32, 80.09, 625.13; 语法二: 类型 数组变量名= 第一个元素值,第二个元素值,第N个元素值 示例: /创建数组对象myfloat,同时手动初始化,数组长度为3 float myfloat= 192.32, 80.09, 625.13;,8,一维数组
5、的初始化 2-2,数组内的元素若是对象,可使用以下语法: 语法三: 数组变量名=new 类型 new构造函数(参数), new构造函数(参数) , new构造函数(参数) 或者 语法四: 类型 数组变量名= new构造函数(参数), new构造函数(参数) , new构造函数(参数) 示例: /定义一个含有3个Interger对象的数组,这3个Interger对象内分别含有10、20、30的int值 Interger myint=new Interger(10), new Interger(20), new Interger(30); 以上4种语法适用于数组元素较少的情况,对于较大的数组,应配
6、合使用循环语句来赋值,9,一维数组的存取 2-1,语法:数组变量名索引值 示例: class Arrtest public static void main(String args) int stscore=88,70,82,93,69;/手动初始化数组元素 System.out.println(stscore0=+stscore0+n+stscore4=+stscore4); System.out.println(=); /stscore=77,71,68,86,76;/错,=.只能在定义时使用 stscore0=91; stscore4=stscore4+10; System.out.pr
7、intln(stscore0=+stscore0+n+stscore4=+stscore4); System.out.println(=); float staverage; /staverage=66.2F,73.49F,71.31F;/错,=.只能在定义时使用 staverage=new float3; staverage0=78.42F;/给第一个数组元素赋值 staverage1=92.23F;/给第二个数组元素赋值 System.out.println(staverage0=+staverage0+n +staverage1=+staverage1+n +staverage2=+st
8、average2); ,10,一维数组的存取 2-2,class Arrtest2 public static void main(String args) char clubmem= new char30; for(int x=1;xclubmem.length;x+) clubmemx=F;/一开始希望数组元素的默认值都是F clubmem0=B; clubmem1=A; System.out.println(clubmem0=+clubmem0); System.out.println(clubmem1=+clubmem1); System.out.println(clubmem2=+c
9、lubmem2); System.out.println(clubmem3=+clubmem3); System.out.println(=); int intarr=new int10; for(int x=0;xintarr.length;x+) intarrx=1+2*x; System.out.print(intarr+x+=+intarrx+ ); if(1+2*x)10) System.out.print( );/元素值10,要多印一个空白 if(x+1)%3=0 | x=intarr.length-1) System.out.println();/每三个换行,最后一个也要换行 ,
10、11,二维数组 2-1,定义:索引有两个层级的数组 例如:一个二维数组myarr23 有二层的索引,第一层的索引有2个(索引值01),第二层的索引有3个(索引值02 ),这个数组总共有236个元素。第一个元素为myarr00,第二个元素为myarr01,其它以此类推,原则是“先行后列”。 一般把一个二维数组看成是一张表,对上例,可看成下表:,其中,“行”是代表第一维的索引,分别为0、1,“列”是代表第二维的索引,分别为0、1、2,且每个格子内都是一个元素。可见,每个数组元素必须由两个层级的索引才能决定,12,二维数组 2-2,在Java中,实际上并没有多维数组的数据类型。一个Java的多维数组
11、,事实上是由许多个一维数组,以某种层级隶属关系串连起来的,形成“数组中的数组”。 一个一维数组所含有的元素,其类型恰好也是一维数组,如此就形成了二维数组。 对二维数组myarr23而言,它可分为3个一维数组,其数组变量分别为myarr、myarr 0 、myarr 1 。其中,myarr的数组元素为myarr 0 、myarr 1 ,这些元素本身也是数组: myarr 0 有myarr00、 myarr01、 myarr02这3个元素, myarr 1 有myarr10、 myarr11 、myarr12这3个元素。 二维数组中的每一个一维数组本身有自己的length属性,13,二维数组声明,
12、声明数组变量 语法:类型 数组变量名; 使用两个“”表示该数组是一个二维数组 “类型”并不限于基本数据类型,它可以是任何一种类类型 声明一个数组变量不能使它被初始化 示例: Byte myarray; String mystr;,14,二维数组定义,定义数组变量并分配存储空间 语法: 类型 数组变量名=new 类型第一维元素个数第二维元素个数; 示例: double thearray = new double32; 当数组对象构造完成后,所有的数组元素会自动被初始化 若数组元素本身也是一个对象,它会被自动初始化为null 数组对象一旦构造完成后,其长度是固定的,不可更改 同一个数组变量可以改变
13、引用的对象,而不管数组长度为何,15,二维数组的初始化 2-1,语法一: 数组变量名=new 类型 第一个元素值,第二个元素值,第N个元素值 语法二: 数组变量名=new 类型 new构造函数(参数), new构造函数(参数) , new构造函数(参数) 以上两者若配合定义数组变量的语法使用,都可以省略大括号前面的“new 类型 ” 只用一个大括号是不行的,要根据数组的维度和索引个数,来决定如何使用大括号,16,二维数组的初始化 2-2,例:若希望第一维有3个索引,第二维有2个索引,用下列语法来指定元素的初始值: 数组变量名=new 类型 值1,值2,值3,值4,值5,值6 例如:int ar
14、r1= new int70,30,50,50,100,50 分析此语句中的大括号:由最外层向内看去,第一层的“”里头,被两个逗号“,”分成3个部分,这就表示arr1数组的第一维索引个数是3;而第二层的每个“”里头,都被一个逗号“,”分成2个部分,这就表示arr1数组的第二维索引个数全部都是2,而且数组元素的值分别要初始化为:70,30,50,50,100,50。 二维数组的内存地址空间并非是一块连续的空间,而是以多个一维数组串连而成,17,二维数组的存取,import java.text.*; class Twoarr public static void main(String args)
15、final int STARTRATE=10; final int NRATES=5; final int NYEARS=10; /定义一个一维数组保存不同的利率值 /设置利率分别为10到14 double interestRate=new doubleNRATES; for (int j=0;jinterestRate.length;j+) interestRatej=(STARTRATE+j)/100.0; /定义一个二维数组保存帐户余额,一维用于年,另一维用于利率 double balance=new doubleNYEARSNRATES; /设置数组第一行起始余额为10000 /注意b
16、alance0表示一个一维数组 for (int j=0;jbalance0.length;j+) balance0j=10000; /计算未来9年每年的本息是多少 for (int i=1;ibalance.length;i+)/从第二行开始计算 for (int j=0;jbalancei.length;j+) /从上一行得到去年的余额 double oldbalance=balancei-1j; /计算利息 double interest=oldbalance*interestRatej; /计算今年的余额 balanceij=oldbalance+interest; /打印利率行作为表
17、头 NumberFormat formatter=NumberFormat.getPercentInstance();/获得一个文本格式化对象 for (int j=0;jinterestRate.length;j+) System.out.print( ); System.out.print(formatter.format(interestRatej); System.out.println(); System.out.println(=); /打印余额表 formatter=NumberFormat.getCurrencyInstance(); for (int i=0;ibalance
18、.length;i+)/循环打印每一行 /打印该行的每一列的值 for (int j=0;jbalancei.length;j+) System.out.print( ); System.out.print(formatter.format(balanceij); System.out.println(); System.out.println(-); ,18,规则的二维数组,定义:二维数组对象的每一行具有相同数量的元素个数 要创建这样的数组对象,应使用一次构造的方式: 例: double thearray = new double32; 数组thearray共有3行,每一行都有2个元素,是规
19、则的,19,不规则的二维数组,定义:二维数组的每一行可以具有不同数量的元素个数 由于二维数组是由多个一维数组组成,因此可根据需要分段来构造二维数组中每一个一维数组的实例。这种方法可创建不规则的二维数组 方法: 1、开始只决定第一维的索引个数,语法: 数组变量名=new 类型第一维索引个数 例: float gradeA; gradeA=new float2; 2、分别构造其中的每一个一维数组 float0= new float2;/第一行有2个元素 float1= new float4;/第二行有4个元素,20,不规则二维数组示例,public class ArrayOfArrays publ
20、ic static void main(String args) int a= 1,3,5, 2,4,6,8, 1,4,9,16,25,36, 10,20,30; for (int i=0;ia.length;i+) System.out.println(a+i+:); for (int j=0;jai.length;j+) System.out.println(a+i+j+=+aij); ,21,拷贝数组(arraycopy),可以把一个数组变量拷贝给另一个,这时,两个变量都指向相同的数组。例如: int samllPrimes=2,3,4,5,7,9; Int luckyNumbers=
21、samllPrimes; luckyNumbers5=12;/现在samllPrimes5的值也是9 如果只是想把一个数组中的值拷贝给另一个数组变量,那么需要使用System类中的arraycopy方法,其语法如下: static void arraycopy(Object src, int src_position, Object dst, int dst_position, int length) 其中: src是源数组, src_position是拷贝开始的位置, dst是目标数组, dst_position是数据在目标数组中存放的开始位置, length是欲拷贝的数据个数 例: int
22、 samllPrimes=2,3,5,7,11,13; Int luckyNumbers= 1001,1002,1003,1004,1005,1006,1007; System. Arraycopy(samllPrimes, 2, luckyNumbers, 3, 4); for (int i=0;i luckyNumbers.length;i+) System.out.println(i+”:”+ luckyNumbersi);,22,克隆(clone)数组,如果想把一个数组复制一份,赋值给另一个数组变量,那么可以使用Object类中的clone()方法,其语法如下: protected O
23、bject clone() 例: char stGrade1=a,b,c,d; char stGrade2=(char) stGrade1. clone();,23,数组类(Arrays),该类在“java.util”包中,该类提供了一些方法用于排序、查找等操作,在编制程序中可以直接使用这些方法。 排序 在编制程序中可以直接使用类Arrays提供的某个sort方法,来对数组排序。sort方法常见的使用形式如下: public static void sort(Xxx a) 该方法用改进的快速排序方法对指定的数组a进行排序,其中数组a是类型为char、byte、short、int、long、fl
24、oat、double或者boolean的一个数组。 sort方法还有另外一种常见的形式: public static void sort(Xxx a, int fromIndex,int toIndex) 这种形式只对数组a中指定范围内的元素(从afromIndex到atoIndex之间的元素,其中不包含atoIndex)排序。,24,数组排序示例,import java.util.*; public class ArraySort public static void main(String args) int a=9,1,3,4,2,5,7,6,8; System.out.println(数组a排序前为:); for(int i=0;ia.length;i+) System.out.print(ai+ ); System.out.println(); System.out.println(数组a排序后为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肉制品品评师安全防护水平考核试卷含答案
- 肉品分级员技能掌握能力考核试卷含答案
- 自行车与电动自行车维修工岗前实操掌握考核试卷含答案
- 输气工复测考核试卷含答案
- 网商岗前实操评优考核试卷含答案
- 中药材购销员岗位培训效果考核试卷含答案
- 纤维检验员岗中未来趋势考核试卷含答案
- 2026中国液体化工物流行业碳足迹测算方法研究
- 2026中国工业互联网安全威胁图谱与防护体系构建
- 2026药物代谢酶筛选技术在新药研发中的应用趋势报告
- 起重指挥Q1培训课件
- 2024-2025学年广东省广州市荔湾一中高一(上)期中英语试卷
- 人才池管理办法
- DB32/T 3576-2019农村产权交易场所建设与管理
- 2025年少先队辅导员技能大赛考试题库(含答案)
- 门诊危重病人处置流程
- 冷却塔填料更换及安全措施
- T-CACM 1411-2022 糖尿病基层中医防治管理指南
- 彩砂环氧防滑地坪施工方案
- DB23-T 1167-2024 装配式聚苯模块保温系统技术规程
- 读文哄睡电台文本
评论
0/150
提交评论