资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第7 7章章创建和使用数组创建和使用数组讲师:李贺飞讲师:李贺飞本章内容本章内容l第一节 声明和使用数组l第二节 多维数组l第三节 命令行参数l第四节 可变参数第一节声明和使用数组 数组数组l数组是多个相同类型数据的组合,实现对这些数据的统一管理l数组中的元素可以是任何数据类型,包括基本类型和引用类型l数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量栈:局部变量和对象的引用堆:对象(new出来的)byte bs = new byte5;bs2 = 15;bs:000000x1230x12301215Personpersons=newPerson5;persons0=newPerson(张三,18);Personp=persons0;persons:nullnullnullnullnull0x1230x123name:”张三”age:180x4560x456p: 0x456一维数组声明一维数组声明l一维数组的声明方式声明方式:typevar或typevar;例如:inta;inta1;doubleb;Mydatec;/对象数组Java语言中声明数组时不能指定其长度(数组中元素的数),例如:inta5;/非法一维数组初始化一维数组初始化l l动态初始化动态初始化动态初始化动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行int arr = new int3;arr0 = 3;arr1 = 9;arr2 = 8;l l静态初始化静态初始化静态初始化静态初始化:在定义数组的同时就为数组元素分配空间并赋值。int a = new int 3, 9, 8;int a = 3,9,8;MyDatedates;dates=newMyDate3;dates0=newMyDate(22,7,1964);dates1=newMyDate(1,1,2000);dates2=newMyDate(22,12,1964);MyDate dates = new MyDate(22, 7, 1964), new MyDate(1, 1, 2000), new MyDate(22, 12, 1964)创建基本数据类型数组创建基本数据类型数组 (1)publicclassTestpublicstaticvoidmain(Stringargs)ints;s=newint10;for(inti=0;i10;i+) si=2*i+1;System.out.println(si);lJava中使用关键字new创建数组对象l创建基本数据类型一维数组对象main栈内存s堆内存处内存状态l创建基本数据类型一维数组对象main栈内存s0int对象000000000堆内存处内存状态 public class Test public static void main(String args) int s; s = new int10; /int s=new int10; /基本数据类型数组如果没有赋初值,基本数据类型数组如果没有赋初值, /Java自动给他们赋默认值。自动给他们赋默认值。 for ( int i=0; i10; i+ ) si =2*i+1; System.out.println(si); 创建基本数据类型数组创建基本数据类型数组 (2)(2)main栈内存s1int对象35791113151719堆内存 public class Test public static void main(String args) int s; s = new int10; for ( int i=0; iB,0+1-12.练习二1.创建一个char类型的36个元素的数组,前26个元素放置A-Z,后10个元素放置0-9。2.使用for循环访问所有元素并打印出来。创建对象数组创建对象数组 (1)l创建元素为引用类型(对象)的数组class MyDate private int day; private int month; private int year; public MyDate(int d, int m, int y)day = d; month = m; year = y; public void display()System.out.println(year + - + month + - + day); bs000000x1230x12310personsNullnullnullnullnull0x23450x2345Name:张三Age:180x1110x111Name:李四Age:200x2220x222 public class Test public static void main(String args) MyDate m; m = new MyDate10; for ( int i=0; i10; i+ ) mi =new MyDate(i+1, i+1,1990+i); mi.display(); main栈内存m堆内存l创建元素为引用类型(对象)的数组演示处内存状态创建对象数组创建对象数组 (2)main栈内存mnullMyDate对象nullnullnullnullnullnullnullnullnull堆内存处内存状态l创建元素为引用类型(对象)的数组演示创建对象数组创建对象数组 (3) public class Test public static void main(String args) MyDate m; m = new MyDate10; for ( int i=0; i10; i+ ) mi =new MyDate(i+1, i+1,1990+i); mi.display(); lJava中使用关键字new创建数组对象main栈内存m*MyDate对象*nullnullnullnullnullnullnull堆内存111990221991331992for循环执行三次后内存状态创建对象数组创建对象数组 (4)public class Test public static void main(String args) MyDate m; m = new MyDate10; for ( int i=0; in-1;如inta=newint3;可引用的数组元素为a0、a1、a2l每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数)数组一旦初始化,其长度是不可变的练练 习习1.声明一个intArray方法,其参数为整型数组。在main方法中创建20个元素的数组,并将其传递给intArray方法。2.intArray方法中将数组中存放2开始的20个偶数。然后使用增强型for循环访问所有元素并打印出来。/声明一个数组intarr=newint20;TestArray2ta2=newTestArray2();ta2.intArray(arr);arr0x1230x123arr0x123ta20x4560x456练练 习习1.定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。提示:生成随机数:Math.random(),返回值类型double;四舍五入取整:Math.round(doubled),返回值类型long。1.从键盘读入学生成绩,找出最高分,并输出学生成绩等级。成绩=最高分-10等级为A成绩=最高分-20等级为B成绩=最高分-30等级为C其余等级为D提示:先读入学生人数,根据人数创建int数组,存放学生成绩。第二节多维数组多维数组多维数组二维数组二维数组:数组中的数组:数组中的数组格式格式1(动态初始化)(动态初始化):int arr = new int32;定义了名称为arr的二维数组二维数组中有3个一维数组每一个一维数组中有2个元素一维数组的名称分别为arr0,arr1,arr2给第一个一维数组1脚标位赋值为78写法是:arr01=78;格式格式2(动态初始化)(动态初始化):int arr = new int3;二维数组中有3个一维数组。每个一维数组都是默认初始化值null(注意:区别于格式1)可以对这个三个一维数组分别进行初始化arr0=newint3;arr1=newint1;arr2=newint2;注:intarr = new int3; /非法非法格式格式3(静态初始化)(静态初始化):int arr = new int3,8,2,2,7,9,0,1,6;定义一个名称为arr的二维数组,二维数组中有三个一维数组每一个一维数组中具体元素也都已初始化第一个一维数组arr0=3,8,2;第二个一维数组arr1=2,7;第三个一维数组arr2=9,0,1,6;第三个一维数组的长度表示方式:arr2.length;注意特殊写法情况:intx,y;x是一维数组,y是二维数组。Java中多维数组不必都是规则矩阵形式 j ij = 0j = 1j = 2j = 3i = 0382i = 127i = 29016练习练习2:获取arr数组中所有元素的和。使用for的嵌套循环即可。练习练习3声明:intx,y;以下选项允许通过编译的是:a)x0=y;b)y0=x;c)y00=x;d)x00=y;e)y00=x0;f)x=y;一维数组:一维数组:int x 或者或者int x 二维数组:二维数组:int y 或者或者 int y 或者或者 int y练习练习4使用二维数组打印一个10行杨辉三角.11112113311464115101051.【提示】1.第一行有1个元素,第n行有n个元素2.每一行的第一个元素和最后一个元素都是13.从第三行开始,对于非第一个元素和最后一个元素的元素.yanghuiij=yanghuii-1j-1+yanghuii-1j;数组中涉及的常见算法数组中涉及的常见算法1.求数组元素的最大值、最小值、平均数、总和等2.数组的复制、反转3.*数组元素的排序练习练习5定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。array10x1230x123array20x123练习练习 6使用简单数组(1)创建一个名为TestArray的类,在main()方法中声明array1和array2两个变量,他们是int类型的数组。(2)使用大括号,把array1初始化为8个素数:2,3,5,7,11,13,17,19。(3)显示array1的内容。(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array0=0,array2=2)。打印出array1。思考:思考:array1和array2是什么关系?拓展:拓展:修改题目,实现array2对array1数组的复制array10x1230x123array2 0x123数组排序数组排序l插入排序直接插入排序、折半插入排序、Shell排序l交换排序冒泡排序、快速排序(或分区交换排序)l选择排序简单选择排序、堆排序l归并排序l基数排序排序方法的选择排序方法的选择(1)若n较小(如n50),可采用直接插入直接插入或直接选择排序直接选择排序。当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。(2)若文件初始状态基本有序(指正序),则应选用直接直接插插入入、冒泡冒泡或随机的快速排序快速排序为宜;(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序快速排序、堆排序堆排序或归并排序归并排序。冒泡排序冒泡排序排序思想:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。数组排序数组排序ljava.util.Arrays类的sort()方法提供了数组元素排序功能:importjava.util.*;publicclassSortpublicstaticvoidmain(Stringargs)intnumber=5,900,1,5,77,30,64,700;Arrays.sort(number);for(inti=0;inumber.length;i+)System.out.println(numberi);操作数组的工具类:操作数组的工具类:Arraysljava.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。Arrays拥有一组static方法。equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。fill():将值填入array中。sort():用来对array进行排序。binarySearch():在排好序的array中寻找元素。另:System.arraycopy():array的复制。数组操作常见问题数组操作常见问题数组脚标越界异常数组脚标越界异常(ArrayIndexOutOfBoundsException)intarr=newint2;System.out.println(arr2);访问到了数组中的不存在的脚标时发生。空指针异常空指针异常(NullPointerException)intarr=null;System.out.println(arr0);arr引用没有指向实体,却在操作实体中的元素时。编译时,不报错!编译时,不报错!第三节命令行参数 理解理解main方法的语法方法的语法 由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数。 命令行参数用法举例命令行参数用法举例publicclassCommandParapublicstaticvoidmain(Stringargs)for(inti=0;iargs.length;i+)System.out.println(args+i+=+argsi);/运行程序CommandPara.javajavaCommandParalisabilyMrBrown 输出结果:输出结果:args0=lisaargs1=bilyargs2=MrBrown第四节可变参数体会可变个数的形参体会可变个数的形参/下面采用数组形参来定义方法public static void test(int a ,String books);/以可变个数形参来定义方法public static void test(int a ,Stringbooks);说明:说明:1.可变参数:方法参数部分指定类型的参数个数是可变多个2.声明方式:方法名(参数的类型名.参数名)3.可变参数方法的使用与方法参数部分使用数组是一致的4.方法的参数部分有可变形参,需要放在形参声明的最后体会可变个数的形参体会可变个数的形参publicvoidtest(Stringmsg)System.out.println(“含字符串数组参数的test方法);publicvoidtest1(Stringbook)System.out.println(“*与可变形参方法构成重载的与可变形参方法构成重载的test1方法方法*);publicvoidtest1(String.books)System.out.println(*形参长度可变的test1方法*);publicstaticvoidmain(Stringargs)TestOverloadto=newTestOverload();/下面两次调用将执行第二个test方法to.test1();to.test1(aa,bb);/下面将执行第一个test方法to.test(newStringaa);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号