第7章数组与枚举.ppt

上传人:本田雅阁 文档编号:3131784 上传时间:2019-07-14 格式:PPT 页数:33 大小:2.17MB
返回 下载 相关 举报
第7章数组与枚举.ppt_第1页
第1页 / 共33页
第7章数组与枚举.ppt_第2页
第2页 / 共33页
第7章数组与枚举.ppt_第3页
第3页 / 共33页
第7章数组与枚举.ppt_第4页
第4页 / 共33页
第7章数组与枚举.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第7章数组与枚举.ppt》由会员分享,可在线阅读,更多相关《第7章数组与枚举.ppt(33页珍藏版)》请在三一文库上搜索。

1、第7章 数组与枚举,数组属于引用型变量,创建数组需要经过声明数组和为数组分配变量2个步骤,7.1 创建数组,声明一维数组有下列两种格式: 数组的元素类型 数组名 ; 数组的元素类型 数组名; 声明二维数组有下列两种格式: 数组的元素类型 数组名 ; 数组的元素类型 数组名;,7.1.1 声明数组,注意:与C/C+不同,Java不允许在声明数组中的方括号内 指定数组元素的个数,如不许 int a12,为数组分配元素的格式如下: 数组名 = new 数组元素的类型数组元素的个数; 如float boy ; boy=new float4; 声明数组和创建数组可以一起完成,如: float boy =

2、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

3、=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和

4、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的

5、引用=“+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);

6、 ,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) /循

7、环变量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()方法遍历数组,如果两个类型相

8、同的数组具有相同的引用,那么它们就有完全相同的元素 如果想把一个数组的元素中的值复制到另个一个数组中的元素中,后者元素值的改变不会影响到原数组元素的值,反之也是如此,如果想实现这样的目的,显然不能使用数组之间进行引用赋值的方式,7.3 复制数组,System类调用方法 public static void arraycopy(sourceArray,int index1,copyArray,int index2,int length) 可以将数组sourceArray从索引index1开始后的length个元素中的数据复制到数组copyArray中,即将数组sourceArray中索引值从in

9、dex1到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、= 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 的各个元素中的值:“); Syste

11、m.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方法返回的新数组

12、的第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

13、=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 ma

14、in(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.p

15、rintln(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类调用 pu

16、blic 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)方法返回(得到)该元素的索引,

17、否则返回一个负数。,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(scann

18、er.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( )用于

19、判断输入的是否是整数,若是,则返回值为true,若不是,返回值为false,7.5.1 枚举类型的定义 枚举类型的定义包括枚举声明和枚举体,语法格式如下: enum 枚举名 常量列表 枚举体中的内容是用逗号分隔的字符序列,称为枚举类型的常量。 enum Season spring,summer,autumn,winter ,7.5 枚举,声明了一个枚举类型后,就可以用该枚举类型的枚举名声明一个枚举变量,例如: Season x; 声明了一个枚举变量x。枚举变量x只能取值枚举类型中的常量。通过使用枚举名和“.”运算符获得枚举类型中的常量,例如: x=Season.spring;,7.5.2 枚举

20、变量,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(); 该一维数组

21、元素的值和该枚举类型中常量依次相对应 Weekday a =Weekday.values( ) ; a0至a6的值依次是:星期一,星期二,星期日,7.5.3 枚举类型与for语句和switch语句,例7-7,enum Color 红,黄,绿 public class Example7_7 public static void main(String args) for(Color a:Color.values() for(Color b:Color.values() if(a!=b) System.out.print(a+“,“+b+“|“); ,2switch语句中使用枚举常量,JDK1.5

22、后的版本允许switch语句中表达式的值是枚举类型的常量,enum Fruit 苹果,梨,香蕉,西瓜,芒果 public class Example7_8 public static void main(String args) double price=0; boolean show=false; for(Fruit fruit:Fruit.values() switch(fruit) case 苹果: price=1.5; show=true; break; case 芒果: price=6.8; show=true; break; case 香蕉: price=2.8; show=true; break; default: show=false; if(show) System.out.println(fruit+“500克的价格:“+price+“元“); ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1