2019年计算机二级考试java章节辅导:数组元素间的比较_第1页
2019年计算机二级考试java章节辅导:数组元素间的比较_第2页
2019年计算机二级考试java章节辅导:数组元素间的比较_第3页
2019年计算机二级考试java章节辅导:数组元素间的比较_第4页
2019年计算机二级考试java章节辅导:数组元素间的比较_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

2019年计算机二级考试java章节辅导:数组元素间的比较5.1.6数组元素间的比较了解了数组元素的访问后,我们能够利用数组元素的遍历实现很多功能。1.数组值、最小值和平均值利用for循环遍历数组的所有元素能够非常方便的求出数组的值、最小值和平均值。[例5-5]]求出一个数组的值、最小值、平均值importjava.util.Scanner;classArray{//计算数组元素值publicintgetMax(int[]a){intmax=a[0];for(inti=0;i if(maxmax=a[i];}}returnmax;}//计算数组元素最小值publicintgetMin(int[]a){intmin=a[0];for(inti=0;i if(min>a[i]){min=a[i];}}returnmin;}//数组元素求和publicintgetSum(int[]a){intsum=0;for(inti=0;i sum+=a[i];}returnsum;}//计算数组元素平均值,调用getSum方法publicdoublegetAverage(int[]a){doubleavg;〃因为getSum(a)和a.length都是int类型,有了(*1.0)后能够使两个int类型的值按 double计算avg=getSum(a)*1.0/a.length;returnavg;

}publicclassTest5_5{publicstaticvoidmain(Stringargs[]){//Sanner类是一个输入类,用于整数、实数、字符串等的输入Scannerscan=newScanner(System.in);int[]a=newint[10];//初始化数组 aSystem.out.println("请连续输入 10个整数");//利用Scanner的nextInt方法从键盘输入10个数//使用a.length的方式,避免数组下标越界异常的发生for(inti=0;i System.out.print("第"+(i+1)+"个整数:");a[i]=scan.nextInt();}ArraymyArray=newArray();System.out.println("System.out.println("System.out.println("数组的值为:"+myArray.getMax(a));System.out.println("System.out.println("System.out.println("数组的最小值为:"+myArray.getMin(a));数组的和为:"+myArray.getSum(a));数组的平均值为:System.out.println(""+myArray.getAverage(a));数组的平均值为:这里我们将对数组元素所做操作集中在一个类 Array中实现,在需要使用这些方法的时候只要生成类 Array的类对象,通过该类对象就能够调用这些方法了。而不是将这些方法放到主类中实现,直接通过主类的main方法调用。这是一种良好的编程习惯,便于代码复用,应予以提倡。程序中使用到了Scanner类,下面予以介绍。Scannerscan=newScanner(System.in);定义一个Scanner类的类对象,在定义过程中,Scanner有多个构造方法,这里我们使用的是其中一个,传递的参数 System.in是标准输入,即从键盘输入。scan.nextInt()表示从键盘上读入一个整数,除此之外,Scanner还支持doble,float等数据类型数据的读入,分别对应方法 nextDouble(),nextFloat()。表5-1Scanner类的常用方法利用表5-1中的方法能够实现多种数据类型数组的读取,特别注意,方法next的返回值是 String类型。2.数组的排序数组中集中了多个数据类型相同的元素,为了更好的对数组元素操作,有时候对数组排序是比不可少的,所以,下面我们讨论如何对数组排序。排序算法在数据结构中有多个,这里算法不是我们讲解的重点,我们选择其中一种:冒泡排序(排序后元素值递增)实行讲解。冒泡排序的关键点是从后向前对相邻的两个数组元素实行比较,若后面元素的值小于前面元素的值,则让两元素交换值;否则,不实行交换。依次遍历所有元素,这样,第一趟排序后数组中的最小值就是下标为0的元素了,依次类推,我们实行第二趟排序(这时候我们无需遍历所有元素,因为数组下标为0的元素,其值已经是最小,我们只需遍历从除下标为0的所有元素),经过第二趟后,下标为1的数组元素存储的是数组中次小的值,这样对于有n个元素的数组,循环执行n-1趟后便可完成排序。当然,也能够从前向后对两个数组元素实行排序,但此时是较大者的值向后移。[例5-6]importjava.util.Scanner;classSortClass{//对数组排序,arr:数组名publicvoidsort(int[]arr){inttemp;//交换值时作为临时变量for(inti=0;i for(intk=arr.length-1;k>i;k--){if(arr[k]>arr[k-1]){//后者小于前者,需要交换两者的值temp=arr[k];arr[k]=arr[k-1];arr[k-1]=temp;}}paint(i+1,arr);//调用数组打印方法}}//打印数组元素,用于排序时检测每趟的排序结果//time:第几趟,arr:数组名publicvoidpaint(inttime,int[]arr){System.out.print("\n第"+time+"趟排序:");for(inti=0;i System.out.print(arr[i]+"\t");}}}publicclassTest5_6{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);intn=5;//数组元素个数int[]arr=newint[n];System.out.println("请从键盘上输入 "+n+"个数:");//利用Scanner的nextInt方法从键盘输入10个数for(inti=0;i System.out.print("第"+(i+1)+"个整数:");arr[i]=scan.nextInt();}System.out.println("排序前数组元素值:");for(inti=0;i System.out.print(arr[i]+"\t");}SortClasssc=newSortClass();//生成SortClass的类对象,用以调用sort方法sc.sort(arr);//调用SortClass的sort方法System.out.println("\n排序后数组元素值:");//字符串中的"\n"是换行操作for(inti=0;i System.out.print(arr[i]+"\t");}}}运行结果如下:请从键盘上输入5个数:TOC\o"1-5"\h\z第1个整数: 52第2个整数: 45第3个整数: 68第4个整数: 96第5个整数: 32排序前数组元素值:5245689632第1趟排序: 96 52 45 68 32第2趟排序: 96 68 52 45 32第3趟排序: 96 68 52 45 32第4趟排序: 96 68 52 45 32排序后数组元素值:9668524532从结果中能够看出,经过 sort方法处理后,数组元素按升序实行排列了,那么,是否能够让数组元素按从大到小顺序排序的,其实,只要改变判断条件“if(arr[k]>arr[k-1])”中的“>”为“ 3.数组特定数据的查找从数组中查找从数组中查找特定数据的最简单的办法是遍历数组中的所有元素,这种插好方法也称为线性查找。以下方法 indexOf()用于查找arr数组中屈指为value的元素的索引位置,若找不到,返回-1。该方法采用的就是线性查找方式。publicintindexOf(int[]arr,intvalue){for(inti=0;i if(arr[i]==value)returni;//找到,返回对应下标}//for循环执行完后,表示未找到,则返回-1return-1;}线性查找的时间复杂度为O(n),它适用于小型数组或未排序的数组。对于大型数组,线性查找的效率比较低。如果数组已经排好序,那么我们能够采用高效的二叉查找算法。二叉查找算法的中心思想史:查找数组中位于中间位置的元素,并将其与查找值实行比较,如果两者相等,就返回该数组元素的下标值;否则,将问题简化为查找已排序数组的一半元素——如果查找值小于数组的中间元素,就查找数组的前半部分,否则就查找数组的后半部分(假设数组按升序排序)。二叉查找的时间复杂度是O(log2n)。例5-7给出了使用二叉查找算法的数组元素查找方法。[例5-7]classArraySearch{//使用二叉查找算法查找数组 arr中值为value的数组元素下标,找不到返回-1publicintindexOf(int[]arr,intvalue){intlow=0;inthigh=arr.length-1;intmiddle;while(lowmiddle=(low+high)/2;if(arr[middle]==value){returnmiddle;}elseif(arr[middle]low=middle+1;}else{high=middle-1;}}return-1;}}publicclassTest5_7{publicstaticvoidmain(Str

温馨提示

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

评论

0/150

提交评论