第6章 数组应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数组应用数组是相同数据类型的集合。数组中的每个元素必须具有相同的数据类型【Javascript除外】。可以按照数组的维数分为:一维数组、二维数组.....一、为什么使用数组例子:孙悟空操练猴子,要求每天记录猴子翻跟头的数目,然后比较出来最大的天数。记录范围1个月。publicstaticvoidmain(String[]args){inti1=30;inti2=32;.......if(i1i2){//拿取i1}else//拿取i2if(i2i3)//拿取i3}二、一维数组一维数组使用时必须先定义数组变量所属类型。语法规则:数组类型变量名[];或数组类型[]变量名;数组类型用于决定数组元素的数据类型。它可以是Java中的任何数据类型,包括基本类型和引用类型。String[]args。单个[]表示的是一维数组。Int[]arr;Short[]arr;People[]people;声明数组后,还不能访问元素,必须通过new的方式进行分配。其语法格式如下:变量名称=new数组类型[数组长度];Inta[]=newint[10];Intb[]=newshort[5];错误数组的下标相当于索引,第一个数小标为0,最后一个数的下标为数组的长度-1。数组中常见异常:java.lang.ArrayIndexOutOfBoundsException数组元素的赋值①直接针对下标元素指定元素赋值publicstaticvoidmain(String[]args){int[]arr=newint[6];arr[0]=30;//第一天跟斗的数目arr[1]=20;arr[2]=40;arr[3]=28;for(inti=0;i6;i++){System.out.println(arr[i]);}}②直接初始化赋值publicvoidinit2(){int[]arr=newint[]{30,20,40,28};for(inti=0;i6;i++){System.out.println(arr[i]);}}会出现下标越界,如何进行修正?利用数组的length属性访问,用于判断数组的长度。publicvoidinit3(){int[]arr=newint[]{30,20,40,28};for(inti=0;iarr.length;i++){System.out.println(arr[i]);}}③直接利用代码块赋值publicvoidinit4(){int[]arr={30,20,40,28};for(inti=0;iarr.length;i++){System.out.println(arr[i]);}}作业:打印出每个月多少天数?publicstaticvoidmain(String[]args){intmonth[]=newint[]{31,28,31,30,31,30,31,31,30,31,30,31};for(inti=0;imonth.length;i++){System.out.println(i+1+月有+month[i]+天);}}返回类型为数组,如何进行处理?privatestaticint[]b(){inta[]=newint[]{2,3,4};returna;}作业:1.利用数组输出112358...这样的序列。2.判断数组元素是否对称。例如{1}、{1,2,1}、{1,2,3,2,1}都是对称数组3.判断一个数组元素中是否有相同的数值,如果有的话输出重复。4.统计一个数字中出现数字最多的数字,如果数字相同的话,则输出数值最大的值。例如231输出结果为3,2312输出结果则为2.对数字进行拆分统计数字出现的次数求取数字的最大值For.....each语法格式:for([数据类型::数组中存放数据的类型][数组中存放的值已value变量进行显示]value:[数组的变量]){System.out.print(value+\t);}publicstaticvoidmain(String[]args){Monkeymonkeys[]=newMonkey[2];Monkeym1=newMonkey(金丝猴);Monkeym2=newMonkey(长尾猴);monkeys[0]=m1;monkeys[1]=m2;for(inti=0;imonkeys.length;i++){System.out.println(monkeys[i].getName());}for(Monkeym:monkeys){System.out.println(m.getName());}}但是foreach不支持下标,如果要有下标值的话,那么再foreach外面设置变量。inti=0;for(Monkeym:monkeys){System.out.println(m.getName());i++;}扩展:下面题目的结果是什么?publicstaticvoidmain(String[]args){Teacher[]teas=newTeacher[10];Teachert1=newTeacher(MRl,1);Teachert2=newTeacher(MSl,2);teas[0]=t1;teas[1]=t2;intage=50;for(Teacherteacher:teas){if(teacher!=null){teacher.setAge(++age);}}for(Teacherteacher:teas){if(teacher!=null){System.out.println(teacher.getUsername()+---+teacher.getPassword()+---+teacher.getAge());}}for(Teacherteacher:teas){teacher=null;}for(Teacherteacher:teas){if(teacher!=null){System.out.println(teacher.getUsername()+---+teacher.getPassword()+---+teacher.getAge());}}}答案是:MRl---1---51MSl---2---52MRl---1---51MSl---2---52为什么会出现这样的结果,其实原因在于for...each循环中,只是一个变量。因此在栈内存中分配,指向堆内存中数组元素。因此当其进行set写操作时,其堆内存中值会跟随发生改变。但是当其将引用变量改为null,并不是删除数组中的元素,只是将引用变量与堆内存中的元素联系进行切断。作业:歌唱比赛开始了,某歌手唱完之后,分数已经出炉,此时将该歌手的分数扣除掉一个最大分数,并且扣除掉一个最小的分数,然后将剩余分数求和求取出平均分数。考点:1.求取数组中最大值2.求取出数组中最小值3.求取出数组元素值的和4.求取数组元素个数大作业:1.有一登陆界面,需要输入用户名和密码和所属角色,此时用户从控制台进行用户名和密码的输入,从而判断出是否能进入管理后台。如果判断不通过的话,则要求重新输入用户信息。如果判断能通过的话,则根据角色分别进入不同的后台页面。2.管理员角色进去之后,能查看到的管理页面为0.学生管理添加学生【ID、Name、】显示学生修改学生【指定学生ID属性】删除学生【指定学生ID】关联教师1.管理教师添加教师显示所有教师修改教师【指定教师ID属性】删除教师关联学生3.学生角色进入系统之后,提供以下权限:1.信息查看2.密码修改4.教师角色进入系统之后,提供以下权限:1.信息查看2.密码修改3.所教学生信息三、数组API数组常用操作类Arrays,其提供的方法均是静态方法。来自于java.util包下具有以下功能:1.给数组赋值,通过fill方法。2.对数组排序,通过sort方法。3.查找数组元素,通过binarySearch【二分查找】方法。4.比较数组,通过equals方法。Fill方法publicstaticvoidmain(String[]args){int[]arr=newint[5];for(intvalue:arr){System.out.print(value);}System.out.println();Arrays.fill(arr,2);//将指定的int值分配给指定int型数组的每个元素。for(intvalue:arr){System.out.print(value);}Arrays.fill(arr,0,3,5);//修改从第一个元素到第三个元素的值修改为5for(intvalue:arr){System.out.print(value);}}Sort方法publicstaticvoidmain(String[]args){int[]arr=newint[]{1,4,3,8,5};Arrays.sort(arr,1,4);//指定索引范围内的数字排序【升序】for(inta:arr){System.out.print(a+\t);}//System.out.println(arr.length);Arrays.sort(arr);//按数字升序进行排序for(inta:arr){System.out.println(a);}}Equalspublicstaticvoidmain(String[]args){int[]arr=newint[]{1,4,3,8,5};int[]arr1=newint[]{1,4,3,8};System.out.println(Arrays.equals(arr,arr1));//比较两个数组是否相等,前提是数组元素必须要相同,数组元素的个数必须要相等}binarySearch二分搜索法二分搜索前提是有序数组序列。二分查找又称为折半查找。优点是比较次数少,查找速度快。但是必须是有序表。publicstaticvoidmain(String[]args){int[]arr=newint[]{1,4,3,8,5};//13458Arrays.sort(arr);//对数组进行排序,因为二分查找要求必须是有序intkey=Arrays.binarySearch(arr,5);System.out.println(key);}四、排序算法冒泡利用数组中元素两个数进行比较,查找出最大值,然后交换位置。同时拿最大值与下一个元素进行比较,依次类推,直到将最大的元素放置于最右端。此时第一轮循环结束,然后接着第二轮循环,但是数组的长度要在原长度的基础上减一,因此最大的元素已经提取出来,不需要再进行处理。时间比较:交换次数:publicstaticvoidsortByPop(int[]arr){for(inti=0;iarr.length-1;i++){for(intj=0;jarr.length-1-i;j++){//嵌套循环每次做完循环之后数组的长度减1if(arr[j]arr[j+1]){inttemp=arr[j];//缓存起来arr[j]=arr[j+1];//将第二个元素赋值给第一个元素arr[j+1]=temp;//将缓存值赋值给数组中第二个元素}}}}选择选择排序的思路就是获取最大值或者最小值的索引,然后根据该索引值与第一个值或者最后一个值进行交换,从而获取交换次数的减少,但是比较时间次数仍然是平方级别。publicstaticvoidsortBySelection(int[]arr){intindex,max=arr.length-1;for(inti=0;iarr.length-1;i++){index=0;//index=0/***执行一轮循环,找到最大值的索引*/for(intj=0;jarr.length-1-i;j++){//嵌套循环每次做完循环之后数组的长度减1if(arr[index]arr[j+1]){index=j+1;}}inttemp=arr[index

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功