《第6章 数组应用.doc》由会员分享,可在线阅读,更多相关《第6章 数组应用.doc(22页珍藏版)》请在金锄头文库上搜索。
1、 数组应用数组是相同数据类型的集合。数组中的每个元素必须具有相同的数据类型【Javascript除外】。可以按照数组的维数分为:一维数组、二维数组.1、 为什么使用数组例子:孙悟空操练猴子,要求每天记录猴子翻跟头的数目,然后比较出来最大的天数。记录范围1个月。public static void main(String args) int i1=30;int i2=32;.if(i1i2)/拿取i1else/拿取i2if(i2i3)/拿取i32、 一维数组一维数组使用时必须先定义数组变量所属类型。语法规则:数组类型 变量名;或数组类型 变量名;数组类型用于决定数组元素的数据类型。它可以是Jav
2、a中的任何数据类型,包括基本类型和引用类型。String args。单个表示的是一维数组。Int arr;Short arr;People people;声明数组后,还不能访问元素,必须通过new的方式进行分配。其语法格式如下:变量名称 = new 数组类型数组长度;Int a=new int10;Int b=new short5; 错误数组的下标相当于索引,第一个数小标为0,最后一个数的下标为数组的长度-1。数组中常见异常:java.lang.ArrayIndexOutOfBoundsExceptionv 数组元素的赋值1 直接针对下标元素指定元素赋值public static void m
3、ain(String args) int arr=new int6;arr0=30;/第一天跟斗的数目arr1=20;arr2=40;arr3=28;for(int i=0;i6;i+)System.out.println(arri);2 直接初始化赋值public void init2()int arr=new int30,20,40,28;for(int i=0;i6;i+)System.out.println(arri);会出现下标越界,如何进行修正?利用数组的length属性访问,用于判断数组的长度。public void init3()int arr=new int30,20,40,
4、28;for(int i=0;iarr.length;i+)System.out.println(arri);3 直接利用代码块赋值public void init4()int arr=30,20,40,28;for(int i=0;iarr.length;i+)System.out.println(arri);作业:打印出每个月多少天数?public static void main(String args) int month=new int31,28,31,30,31,30,31,31,30,31,30,31;for (int i = 0; i month.length; i+) Sys
5、tem.out.println(i+1+月有+monthi+天);返回类型为数组,如何进行处理?private static int b()int a=new int2,3,4;return a;作业:1. 利用数组输出1 1 2 3 5 8.这样的序列。2. 判断数组元素是否对称。例如1、1,2,1、1,2,3,2,1都是对称数组3. 判断一个数组元素中是否有相同的数值,如果有的话输出重复。4. 统计一个数字中出现数字最多的数字,如果数字相同的话,则输出数值最大的值。例如231输出结果为3,2312输出结果则为2.l 对数字进行拆分l 统计数字出现的次数l 求取数字的最大值v For.eac
6、h语法格式:for(数据类型:数组中存放数据的类型 数组中存放的值已value变量进行显示value : 数组的变量)System.out.print(value+t);public static void main(String args) Monkey monkeys=new Monkey2;Monkey m1=new Monkey(金丝猴);Monkey m2=new Monkey(长尾猴);monkeys0=m1;monkeys1=m2;for(int i=0;imonkeys.length;i+)System.out.println(monkeysi.getName();for(Mo
7、nkey m : monkeys)System.out.println(m.getName();但是foreach不支持下标,如果要有下标值的话,那么再foreach外面设置变量。int i=0;for(Monkey m : monkeys)System.out.println(m.getName();i+;扩展:下面题目的结果是什么?public static void main(String args) Teacher teas = new Teacher10;Teacher t1 = new Teacher(MR l, 1);Teacher t2 = new Teacher(MS l,
8、2);teas0 = t1;teas1 = t2;int age = 50;for (Teacher teacher : teas) if (teacher != null) teacher.setAge(+age);for (Teacher teacher : teas) if (teacher != null) System.out.println(teacher.getUsername() + -+ teacher.getPassword() + - + teacher.getAge();for (Teacher teacher : teas) teacher=null;for (Tea
9、cher teacher : teas) if (teacher != null) System.out.println(teacher.getUsername() + -+ teacher.getPassword() + - + teacher.getAge();答案是:MR l-1-51MS l-2-52MR l-1-51MS l-2-52为什么会出现这样的结果,其实原因在于for.each循环中,只是一个变量。因此在栈内存中分配,指向堆内存中数组元素。因此当其进行set写操作时,其堆内存中值会跟随发生改变。但是当其将引用变量改为null,并不是删除数组中的元素,只是将引用变量与堆内存中的
10、元素联系进行切断。作业:歌唱比赛开始了,某歌手唱完之后,分数已经出炉,此时将该歌手的分数扣除掉一个最大分数,并且扣除掉一个最小的分数,然后将剩余分数求和求取出平均分数。考点:1. 求取数组中最大值 2. 求取出数组中最小值 3.求取出数组元素值的和4. 求取数组元素个数大作业:1. 有一登陆界面,需要输入用户名和密码和所属角色,此时用户从控制台进行用户名和密码的输入,从而判断出是否能进入管理后台。如果判断不通过的话,则要求重新输入用户信息。如果判断能通过的话,则根据角色分别进入不同的后台页面。2. 管理员角色进去之后,能查看到的管理页面为0. 学生管理l 添加学生【ID、Name、】l 显示学
11、生l 修改学生【指定学生ID属性】l 删除学生【指定学生ID】l 关联教师1. 管理教师l 添加教师l 显示所有教师l 修改教师【指定教师ID属性】l 删除教师l 关联学生3. 学生角色进入系统之后,提供以下权限:1. 信息查看2. 密码修改4. 教师角色进入系统之后,提供以下权限:1. 信息查看2. 密码修改3. 所教学生信息3、 数组API数组常用操作类Arrays,其提供的方法均是静态方法。来自于java.util包下具有以下功能:1. 给数组赋值,通过fill方法。2. 对数组排序,通过sort方法。3. 查找数组元素,通过binarySearch【二分查找】方法。4. 比较数组,通过
12、equals方法。 Fill方法public static void main(String args) int arr=new int5;for(int value : arr)System.out.print(value);System.out.println();Arrays.fill(arr, 2);/将指定的 int 值分配给指定 int 型数组的每个元素。for(int value : arr)System.out.print(value);Arrays.fill(arr,0,3, 5);/修改从第一个元素到第三个元素的值修改为5for(int value : arr)System.out.print(value); Sort方法public static void main(String args) int arr=new int1,4,3,8,5;Arrays.sort(arr,1,4);/指定索引范围内的数字排序【升序】for(int a : arr)System.out.print(a+t);/System.out.println(arr.length);Arrays.sort(arr);/按数字升序进行排序for(int a : arr)System.out.println(a); Equalspublic static void main(S