已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 数组与枚举,数组属于引用型变量,创建数组需要经过声明数组和为数组分配变量2个步骤,7.1 创建数组,声明一维数组有下列两种格式: 数组的元素类型 数组名 ; 数组的元素类型 数组名; 声明二维数组有下列两种格式: 数组的元素类型 数组名 ; 数组的元素类型 数组名;,7.1.1 声明数组,注意:与C/C+不同,Java不允许在声明数组中的方括号内 指定数组元素的个数,如不许 int a12,为数组分配元素的格式如下: 数组名 = new 数组元素的类型数组元素的个数; 如float boy ; boy=new float4; 声明数组和创建数组可以一起完成,如: float boy =new float4;,7.1.2 为数组分配元素,二维数组的创建: int mytwo ; mytwo=new int34; 注意:构成二维数组的一维数组不必有相同的长度 如:int a =new int3 ; a0=new int6; a1=new int12; a2=new int8;,一维数组通过索引符访问自己的元素 需要注意的是索引从0开始 二维数组也通过索引符访问自己的元素,7.1.3 数组元素的使用,数组的元素的个数称作数组的长度。 对于一维数组,“数组名.length”的值就是数组中元素的个数; 对于二维数组“数组名.length”的值是它含有的一维数组的个数 float a =new float12; int b =new int36; a.length为12 b.length为3,7.1.4 length的使用,创建数组后,系统会给数组的每个元素一个默认的值,如,float型是0.0 在声明数组的同时也可以给数组的元素一个初始值 如float boy =21.3f,23.5f,1.2f,29.3f 也可以直接用若干个一维数组初始化一个二维数组,这些一维数组的长度不尽相同 int a =1,1,1,1,2,1,1,3,3,1,7.1.5 数组的初始化,数组属于引用型变量,因此两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素 如果使用了下列赋值语句(a和b的类型必须相同): a=b; 那么,a中存放的引用和b的相同,这时系统将释放最初分配给数组a的元素,使得a的元素和b的元素相同 说明:和类对象的赋值原理一样,7.1.6 数组的引用,例7-1,public class Example7_1 public static void main(String args) int a=1,2,3,4; int b=100,200,300; System.out.println(“数组a的元素个数=“+a.length); System.out.println(“数组b的元素个数=“+b.length); System.out.println(“数组a的引用=“+a); System.out.println(“数组b的引用=“+b); System.out.println(“a=b的结果是“+(a=b); a=b; System.out.println(“数组a的元素个数=“+a.length); System.out.println(“数组b的元素个数=“+b.length); System.out.println(“a=b的结果是“+(a=b); System.out.println(“a0=“+a0+“,a1=“+a1+“,a2=“+a2); System.out.print(“b0=“+a0+“,b1=“+b1+“,b2=“+b2); ,7.2.1 基于循环语句的遍历 JDK1.5中新增的for循环结构,该结构适合于数组类型 for(声明循环变量:数组的名字) ,7.2 遍历数组,例 7-2,public class Example7_2 public static void main(String args) int a=1,2,3,4; char b=a,b,c,d; for(int n=0;na.length;n+) /传统方式 System.out.println(an); for(int n=0;nb.length;n+) /传统方式 System.out.println(bn); for(int i:a) /循环变量i依次取数组a的每一个元素的值(非传统方式) System.out.println(i); for(char ch:b) /循环变量ch依次取数组b的每一个元素的值(非传统方式) System.out.println(ch); ,注意,for(声明循环变量:数组的名字) 中的“声明循环变量”必须是变量声明,不可以使用已经声明过的变量。,让Arrays类调用 public static String toString(int a) 方法,可以得到参数指定的一维数组a的如下格式的字符串表示: a0,a1 aa.length-1,7.2.2 使用toString()方法遍历数组,如果两个类型相同的数组具有相同的引用,那么它们就有完全相同的元素 如果想把一个数组的元素中的值复制到另个一个数组中的元素中,后者元素值的改变不会影响到原数组元素的值,反之也是如此,如果想实现这样的目的,显然不能使用数组之间进行引用赋值的方式,7.3 复制数组,System类调用方法 public static void arraycopy(sourceArray,int index1,copyArray,int index2,int length) 可以将数组sourceArray从索引index1开始后的length个元素中的数据复制到数组copyArray中,即将数组sourceArray中索引值从index1到index1+length-1元素中的数据复制到数组copyArray的某些元素中;接收数据的copyArray数组从第index2元素开始存放这些数据。 如果接收数据的数组copyArray不能存放下待复制的数据,程序运行将发生异常,7.3.1 arraycopy方法,例7-3,import java.util.Arrays; public class Example7_3 public static void main(String args) char a = A,B,C, D,E,F, b = 1,2,3,4,5,6; int c =-1,-2,-3,-4,-5,-6, d = 10,20,30,40,50,60; System.arraycopy(a, 0, b, 0, a.length); System.arraycopy(c, 2, d, 2, c.length-3); System.out.println(“数组 a 的各个元素中的值:“); System.out.println(Arrays.toString(a); System.out.println(“数组 b 的各个元素中的值:“); System.out.println(Arrays.toString(b); System.out.println(“数组 c 的各个元素中的值:“); System.out.println(Arrays.toString(c); System.out.println(“数组 d 的各个元素中的值:“); System.out.println(Arrays.toString(d); ,Arrays类调用 public static double copyOf(double original,int newLength) 方法可以把参数original指定的数组中从索引0开始的newLength个元素复制到一个新数组中,并返回这个新数组,且该新数组的长度为newLength,如果newLength的值大于original的长度,copyOf方法返回的新数组的第newLength索引后的元素取默认值。类似的方法还有: public static float copyOf(float original,int newLength) public static int copyOf(int original,int newLength) public static char copyOf(char original,int newLength),7.3.2 copyOf和copyOfRange()方法,例如,int a=100,200,300,400; int b=Arrays.copyOf(a,5); b0=100,b1=200,b2=300,b3=400,b4=0,copyOfRange,可以把数组中部分元素的值复制到另一个数组中,使用copyOfRange方法 public static double copyOfRange(double original,ing from,int to) 复制从from 开始至to-1 如: int a=100,200,300,400,500,600; int b=Arrays.copyOfRange(a,2,5); b0=300,b1=400,b2=500,例7-4,import java.util.*; public class Example7_4 public static void main(String args) int a =11,22,33,44,55,b,c,d; b=Arrays.copyOf(a,8); System.out.println(“数组 a 的各个元素中的值:“); System.out.println(Arrays.toString(a); System.out.println(“数组 b 的各个元素中的值:“); System.out.println(Arrays.toString(b); c=Arrays.copyOfRange(a,3,5); System.out.println(“数组 c 的各个元素中的值:“); System.out.println(Arrays.toString(c); d=Arrays.copyOfRange(a,1,7); System.out.println(“数组 d 的各个元素中的值:“); System.out.println(Arrays.toString(d); ,可以使用循环语句对数组的排序,也可以使用循环语句查找某个数据是否在一个排序的数组中。Arrays类调用相应的方法可以实现对数组的快速排序,比如,Array类调用 public static void sort(double a) 方法可以把参数a指定的double类型数组按升序排序。,7.4 排序与二分查找,Array类调用 public static void sort(double a,int start,int end) 方法可以把参数a指定的double类型数组中索引star至end-1的元素的值按升序排序。,public static int binarySearch(double a, double number) 方法判断参数number指定的数值是否在参数a指定的数组中,即number是否和数组a的某个元素的值相同,其中数组a必须是事先已排序的数组。如果number和数组a中某个元素的值相同,int binarySearch(double a, double number)方法返回(得到)该元素的索引,否则返回一个负数。,Array类调用(二分法),例7-5,import java.util.*; public class Example7_5 public static void main(String args) Scanner scanner = new Scanner(System.in); int a=12,34,9,23,45,6,45,90,123,19,34; Arrays.sort(a); System.out.println(Arrays.toString(a); System.out.println(“输入整数,程序判断该整数是否在数组中:“); while(scanner.hasNextInt() int number = scanner.nextInt(); int index=Arrays.binarySearch(a,number); if(index=0) System.out.println(number+“和数组中索引为“+index+“的元素值相同“); else System.out.println(number+“不与数组中任何元素值相同“); System.out.println(“是否继续输入整数?输入任何非整数即可结束“); ,说明:,Scanner类中 nextInt( )方法用于从键盘输入一个整数 hasNextInt( )用于判断输入的是否是整数,若是,则返回值为true,若不是,返回值为false,7.5.1 枚举类型的定义 枚举类型的定义包括枚举声明和枚举体,语法格式如下: enum 枚举名 常量列表 枚举体中的内容是用逗号分隔的字符序列,称为枚举类型的常量。 enum Season spring,summer,autumn,winter ,7.5 枚举,声明了一个枚举类型后,就可以用该枚举类型的枚举名声明一个枚举变量,例如: Season x; 声明了一个枚举变量x。枚举变量x只能取值枚举类型中的常量。通过使用枚举名和“.”运算符获得枚举类型中的常量,例如: x=Season.spring;,7.5.2 枚举变量,Weekday.java public enum Weekday 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 Example7_6.java public class Example7_6 public static void main(String args) Weekday x=Weekday.星期日; if(x=Weekday.星期日) System.out.println(x); System.out.println(“今天我休息“); ,1使用for语句遍历枚举常量 枚举类型可以用如下形式返回一个一维数组: 枚举类型的名字.values(); 该一维数组元素的值和该枚举类型中常量依次相对应 We
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年南京农业大学教师招聘考试真题
- 历年监理工程师考试题库
- 2021年中级职称考试中级会计实务真题及答案
- 2025教师资格证真题试卷+答案
- 全熔化焊接与热切割模拟考试附答案完整版
- 列检值班员高级理论知识试题题库(1184道)
- 2025年吉林货运从业资格证考试试题和答案大全
- 副科级考试试题及答案
- 2025年师德师风及法律法规知识竞赛题库
- 《职业病防治法》试题及答案
- 2025年江苏省公考《申论》(C卷)题及参考答案
- 2025年模拟电子技术考试题库及答案1
- 成都七中万达学校高一上化学半期考试试卷
- 2025医疗机构志愿者服务体系管理与社会责任履行报告
- 江西省九校2025-2026学年高三上学期11月期中考试英语试卷(含答案)
- 【2025年】办公室文员测试题库及参考答案
- 2025年6月江苏扬州经济技术开发区区属国有企业招聘素质测试(初试)笔试考试备考试题及答案解析
- 2025年广东省普通高中学业水平合格性考试英语试题(原卷版)
- 运营管理职业规划
- 2025年船舶工业智能化生产模式研究报告及未来发展趋势预测
- Unit5FunClubsSectionB1a-2b课件人教版七年级英语上册
评论
0/150
提交评论