JSE-06(创建和使用数组)-文档资料_第1页
JSE-06(创建和使用数组)-文档资料_第2页
JSE-06(创建和使用数组)-文档资料_第3页
JSE-06(创建和使用数组)-文档资料_第4页
JSE-06(创建和使用数组)-文档资料_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第7 7章章创建和使用数组创建和使用数组讲师:李贺飞讲师:李贺飞本章内容本章内容l 第一节 声明和使用数组l 第二节 多维数组l 第三节 命令行参数l 第四节 可变参数第一节 声明和使用数组 数组数组l 数组是多个相同类型数据的组合,实现对这些数据的统一管理l 数组中的元素可以是任何数据类型,包括基本类型和引用类型l 数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量栈:局部变量和对象的引用堆:对象(new出来的)byte bs = new byte5;bs2 = 15;bs:000000 x1230 x12301215Person persons =

2、new Person5;persons0 = new Person(张三, 18);Person p = persons0;persons:nullnullnullnullnull0 x1230 x123name:”张三”age:180 x4560 x456p: 0 x456一维数组声明一维数组声明l 一维数组的声明方式声明方式: type var 或 type var;例如: int a; int a1; double b; Mydate c; /对象数组Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a5; /非法一维数组初始化一维数组初始化:数组声明且为数组元

3、素分配空间与赋值的操作分开进行int arr = new int3;arr0 = 3;arr1 = 9;arr2 = 8;:在定义数组的同时就为数组元素分配空间并赋值。int a = new int 3, 9, 8;int a = 3,9,8;MyDate dates;dates = new MyDate3;dates0 = new MyDate(22, 7, 1964);dates1 = new MyDate(1, 1, 2000);dates2 = new MyDate(22, 12, 1964);MyDate dates = new MyDate(22, 7, 1964), new My

4、Date(1, 1, 2000), new MyDate(22, 12, 1964)创建基本数据类型数组创建基本数据类型数组 (1) public class Test public static void main(String args) int s; s = new int10; for ( int i=0; i10; i+ ) si =2*i+1; System.out.println(si); l Java中使用关键字new创建数组对象l 创建基本数据类型一维数组对象main栈内存s堆内存处内存状态l 创建基本数据类型一维数组对象main栈内存s0int对象000000000堆内存处

5、内存状态 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 pub

6、lic static void main(String args) int s; s = new int10; for ( int i=0; i B,0+1 - 1 练习二创建一个char类型的36个元素的数组,前26个元素放置A-Z, 后10个元素放置0-9。使用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

7、= m; year = y; public void display()System.out.println(year + - + month + - + day); bs000000 x1230 x12310personsNullnullnullnullnull0 x23450 x2345Name:张三Age:180 x1110 x111Name:李四Age:200 x2220 x222 public class Test public static void main(String args) MyDate m; m = new MyDate10; for ( int i=0; i10;

8、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=

9、0; i10; i+ ) mi =new MyDate(i+1, i+1,1990+i); mi.display(); l Java中使用关键字new 创建数组对象main栈内存mm*MyDate对象*nullnullnullnullnullnullnull堆内存111990221991331992for循环执行三次后内存状态创建对象数组创建对象数组 (4) public class Test public static void main(String args) MyDate m; m = new MyDate10; for ( int i=0; in-1;如int a=new int3;

10、 可引用的数组元素为a0、a1、a2l 每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数) 数组一旦初始化,其长度是不可变的练练 习习 声明一个intArray方法,其参数为整型数组。在main方法中创建20个元素的数组,并将其传递给intArray方法。 intArray方法中将数组中存放2开始的20个偶数。然后使用增强型for循环访问所有元素并打印出来。/声明一个数组int arr = new int20;TestArray2 ta2 = new TestArray2();Array(arr);arr0 x1230 x123ar

11、r0 x123ta20 x4560 x456练练 习习定义类Student,包含三个属性:学号number(int),年级state(int),成绩score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定,打印出3年级(state值为3)的学生信息。提示:生成随机数:Math.random(),返回值类型double; 四舍五入取整:Math.round(double d),返回值类型long。1. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。成绩=最高分-10 等级为A 成绩=最高分-20 等级为B成绩=最高分-30 等级为C 其余 等级为D提示:先读入学

12、生人数,根据人数创建int数组,存放学生成绩。第二节 多维数组 多维数组多维数组二维数组二维数组:数组中的数组:数组中的数组格式格式1(动态初始化)(动态初始化):int arr = new int32; 定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr0, arr1, arr2 给第一个一维数组1脚标位赋值为78写法是:arr01 = 78;格式格式2(动态初始化)(动态初始化):int arr = new int3; 二维数组中有3个一维数组。 每个一维数组都是默认初始化值null (注意:区别于格式1) 可以对这个三个一维数组

13、分别进行初始化 arr0 = new int3; arr1 = new int1; arr2 = new int2;注: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; 注意特殊写法情况:int x,y;

14、x是一维数组,y是二维数组。 Java中多维数组不必都是规则矩阵形式 j ij = 0j = 1j = 2j = 3i = 0382i = 127i = 29016练习练习2:获取arr数组中所有元素的和。使用for的嵌套循环即可。练习练习3声明:int x,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 行杨辉三角

15、.11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 . 【提示】 1. 第一行有 1 个元素, 第 n 行有 n 个元素 2. 每一行的第一个元素和最后一个元素都是 1 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素. yanghuiij = yanghuii-1j-1 + yanghuii-1j;数组中涉及的常见算法数组中涉及的常见算法1.求数组元素的最大值、最小值、平均数、总和等2.数组的复制、反转3.*数组元素的排序练习练习5定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。

16、array10 x1230 x123array20 x123练习练习 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数组的复制arr

17、ay10 x1230 x123array2 0 x123数组排序数组排序l 插入排序 直接插入排序、折半插入排序、Shell排序l 交换排序 冒泡排序、快速排序(或分区交换排序)l 选择排序 简单选择排序、堆排序l 归并排序l 基数排序排序方法的选择排序方法的选择(1)若n较小(如n50),可采用直接插入直接插入或直接选择排序直接选择排序。 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。(2)若文件初始状态基本有序(指正序),则应选用直接直接插插入入、冒泡冒泡或随机的快速排序快速排序为宜;(3)若n较大,则应采用时间复杂度为O(nlgn)的

18、排序方法:快速排序快速排序、堆排序堆排序或归并排序归并排序。冒泡排序冒泡排序排序思想:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其它的数进行类似操作。数组排序数组排序l java.util.Arrays类的sort()方法提供了数组元素排序功能:import java.util.*;public class Sort public static void main(String args) int number = 5,900,1,5,77,30,64,700;Arrays.sort(number);for(int i = 0;

19、 i number.length; i+)System.out.println(numberi); 操作数组的工具类:操作数组的工具类:Arraysl java.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。Arrays拥有一组static方法。 equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。 fill():将值填入array中。 sort():用来对array进行排序。 binarySearch():在排好序的array中寻找元素。 另:System.arraycopy():array的复制。 数组操作常见问题数组

20、操作常见问题数组脚标越界异常数组脚标越界异常(ArrayIndexOutOfBoundsException)int arr = new int2;System.out.println(arr2);访问到了数组中的不存在的脚标时发生。空指针异常空指针异常(NullPointerException)int arr = null;System.out.println(arr0);arr引用没有指向实体,却在操作实体中的元素时。编译时,不报错!编译时,不报错!第三节 命令行参数 理解理解main方法的语法方法的语法 由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public

21、,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数。 命令行参数用法举例命令行参数用法举例 public class CommandPara public static void main(String args) for ( int i = 0; i args.length; i+ ) System.out.println(args + i + = + argsi); /运行程序CommandPara.javajava CommandPara lisa bily Mr Bro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论