收藏 分享(赏)

第5章-方法和数组.ppt

上传人:dzzj200808 文档编号:3229859 上传时间:2018-10-08 格式:PPT 页数:45 大小:325KB
下载 相关 举报
第5章-方法和数组.ppt_第1页
第1页 / 共45页
第5章-方法和数组.ppt_第2页
第2页 / 共45页
第5章-方法和数组.ppt_第3页
第3页 / 共45页
第5章-方法和数组.ppt_第4页
第4页 / 共45页
第5章-方法和数组.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、第5章 方法和数组,本章学习目标,理解方法的概念。 掌握方法的定义和调用。 熟悉递归算法。 掌握数组的概念和使用。 理解方法的数组参数传递。,5.1 方法的概念和定义,在一个程序中,相同的程序段可能会多次重复出现,为了减少代码量和出错概率,一般将这些重复出现的代码段单独抽出来,写成子程序形式,以供多次调用。 这类子程序在Java语言中叫做方法。 这类子程序也叫函数(如C语言)。,方法的好处,缩短程序 提高程序的可维护性 分而治之 方法是Java语言的重要概念之一,同时也是实现结构化程序设计的主要手段,结构化程序设计是面向对象程序设计的基础,因此,掌握Java方法非常重要。,main()方法 S

2、ystem.out.println(),int Average(int x, int y)int result;result = (x + y) / 2;return result;,自定义方法的一般形式,返回值类型 方法名(类型 形式参数1, 类型 形式参数2, )方法体,注意,(1)如果不需要形式参数,则参数表(即方法头的小括号)中就空着。 (2)返回值类型与return语句配合,即return语句后面的表达式类型应与返回值类型相一致。如果不需要返回值,则应该用void定义返回值类型,同时return语句之后不再需要任何表达式。,注意,(3)一个方法中可以有多条的return语句,只要方法

3、执行到其中的任何一条return语句时,就中止方法的执行,返回到调用它的地方。 (4)方法内部可定义只能自己使用的变量,称之为局部变量(或内部变量),局部变量的作用域仅限于定义它们的地方起一直到方法体结束。 (5)方法中局部变量的确定值要在该方法被调用时由实际参数传入确定。,【例5-1】不带参数同时也没有返回值的方法示例。void Print_wang( ) System.out.println(“*“);System.out.println(“ * “);System.out.println(“ * “);System.out.println(“*“);System.out.println(

4、“ * “);System.out.println(“ * “);System.out.println(“*“);,【例5-2】带参数但没有返回值的方法示例。void Print_lines(int i) for(int j=0;ji;j+)System.out.println(“*“);,double Area(double a,double b,double c) double s,area;s = (a+b+c)/2;area = Math.sqrt(s*(s-a)*(s-b)*(s-c);return area;,【例5-4】定义求圆面积的方法。double Circle(double

5、 radius) double area;area = 3.14*radius*radius;return area;,5.2 方法的调用,在程序中是通过对方法的调用来执行方法体的,Java语言中,方法调用的一般形式为: 方法名(实际参数表) 对无参方法调用时则只要写上小括号即可。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式,各实参之间要用逗号间隔开,并注意需与形参相对应。,5.2.1 调用方式,(1)方法表达式 (2)方法语句 (3)方法参数,【例5-5】调用Average方法。 public class Test static int Average(int x, int

6、y)int result;result = (x + y) / 2;return result;public static void main(String args )int a = 12;int b = 24;int ave = Average(a, b); System.out.println(“Average of “+ a +“ and “+b+“ is “+ ave); ,【例5-6】调用例5-1中的Print_wang方法。 public class Test static void Print_wang() System.out.println(“*“);System.out.

7、println(“ * “);System.out.println(“ * “);System.out.println(“*“);System.out.println(“ * “);System.out.println(“ * “);System.out.println(“*“);public static void main(String args )Print_wang(); ,【例5-7】调用Average方法。 public class Test static int Average(int x, int y)int result;result = (x + y) / 2;return

8、 result;public static void main(String args )int a = 12;int b = 24;System.out.println(“Average of “+ a +“ and “+b+“ is “+ Average(a, b); ,超前引用,【例5-8】调用求三角形面积的方法。 public class Test public static void main(String args) double a=3,b=4,c=5,s; /三角形的三条边 double area; /三角形的面积area = Area(a,b,c); /调用方法求面积Syst

9、em.out.println(“该三角形的面积为:“+area);/定义求三角形面积的方法static double Area(double a,double b,double c) double s,area;s = (a+b+c)/2;area = Math.sqrt(s*(s-a)*(s-b)*(s-c);return area; ,5.2.2 参数传递,当对带参方法进行调用时,实际参数将会传递给形式参数,也就是实参与形参结合的过程。 参数是方法调用时进行信息交换的渠道之一,方法的参数分为形参和实参两种,形参出现在方法定义中,在整个方法体内都可以使用,离开该方法则不能使用。实参出现在主调

10、方法中,进入被调方法后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生方法调用时,主调方法把实参的值传送给被调方法的形参,从而实现主调方法传递数据给被调方法。,形参和实参,(1)形参只在方法被调用时才分配内存单元,在调用结束时,便会“释放”所分配的内存单元。因此,形参只在本方法内有效,方法调用结束后就不能再使用。方法内部定义的(局部)变量也是如此。 (2)实参可以是常量、变量、表达式,甚至是方法等,无论实参是何种类型的量,在进行方法调用时,它们都必须具有确定的值,以便把这些值传递给形参。 (3)实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。 (4)方法调

11、用中发生的数据传递是单向的,因此在方法调用过程中,若形参的值改变,则实参不会跟着改变。,【例 5-9】写出下列程序的运行结果。 public class Test static void Swap(int x,int y) int temp;temp=x; x=y; y=temp;System.out.println(“x=“+x+“,y=“+y);public static void main(String args) int x=10,y=20;Swap(x,y);System.out.println(“x=“+x+“,y=“+y); ,程序运行结果: x=20,y=10 x=10,y=2

12、0,图5-1 方法的参数传递,5.2.3 返回值,带返回值方法的一般形式为:返回值类型 方法名(类型 形式参数1, 类型 形式参数2, )方法体return 表达式;,返回值,方法返回值是指方法被调用之后,执行方法体中的程序段所取得的并通过return语句返回给主调方法的值。 方法的返回值只能通过 return语句返回给主调方法。 方法内部返回值的数据类型和方法定义中方法的返回值类型应保持一致。 不返回方法值的方法,可以明确定义其为“空类型“,类型说明符为“ void “。,5.2.4 方法嵌套及递归,Java语言允许在一个方法的定义中出现对另一个方法的调用,我们把这样的情况称为方法的嵌套(调

13、用),即在被调方法中又调用了其它方法。,【例 5-10】写出下列程序的运行结果。 public class Test static int m1(int a ,int b) int c;a+=a;b+=b; c=m2(a,b);return(c*c);static int m2( int a,int b) int c;c=a*b%3;return( c );public static void main(String args) int x=1,y=3,z;z= m1(x,y);System.out.println(“z=“+z); ,程序运行结果如下:z=0,public class Tes

14、t static double Circle(double radius) double area;area = 3.14*radius*radius;return area;static double Cylinder(double r,double h)double vol;vol = Circle(r)*h;return vol;public static void main(String args) double r=5.5,h=30,v;v = Cylinder(r,h);System.out.println(“底面半径为“+r+“,高度为“+h+“的圆柱体体积:“+v); ,【例

15、5-11】定义一个求圆柱体体积的方法,要求利用例5-4求圆面积的方法来实现,并在main()方法中进行验证。,递归,一个方法在它的方法体内调用它自身的情况称为递归调用,这是一种特殊的嵌套调用,称之为递归方法。,int m(int x) int y; z=m(y); return z; ,【例 5-12】用递归法计算n的阶乘。,n!可用下述公式递归表示:n!=1 (n=0,1)n!= n (n-1)! (n1),static long factorial(int n)long f=0;if(n0) System.out.println(“n0,input error“);else if(n=0|

16、n=1) f=1;else f=factorial(n-1)*n;return f;,【例 5-12】用递归法计算n的阶乘。,5.3 变量作用域,局部(动态)变量也称为内部变量,局部变量是在方法内作定义说明的,在各个方法(包括main()方法)中定义的变量及方法的形式参数变量均为局部变量。 其作用域仅限于方法内,离开该方法后再使用这种变量则是非法的,因为它已经被“释放”不存在了。,int m1(int a) /*方法m1*/ int b,c; int m2(int x) /*方法m2*/ int y,z; public static void main(String args) /*主方法ma

17、in()*/ int m,n; ,提示,1) 主方法中定义的变量只能在主方法中使用,因为它也是一个方法,与其它方法是平行关系。 2) 形参变量是属于被调方法的局部变量,而实参变量一般是属于主调方法的局部变量。 3) 允许在不同的方法中使用相同的变量名,它们代表不同的对象,各自在自己的作用域中发挥作用。如进行方法调用时,形参和实参的变量名都为x,这是允许的。 4) 在复合语句中定义变量,其作用域只在复合语句范围内。,5.4 数组,5.4.1 数组的概念 在现实问题中,经常需要处理一批类似的数据,如对6位同学的成绩进行处理,利用基本数据类型的话,那就必须定义6个变量:result1,result2

18、,result3,result4,result5和result6。假如需要对60位同学的成绩进行处理的话,那就需要定义60个基本数据类型的变量,这是不方便的。 为了便于处理一批同类型的数据,Java语言引入了数组类型。,数组特点,首先,数组中的每个元素都是相同数据类型的; 其次,数组中的这些相同数据类型元素是通过数组下标来标识的,并且该下标是从0开始的; 最后,数组元素在内存中的存放是连续的。,5.4.2 数组的声明和创建,一维数组的声明格式为:数据类型 数组名; 或数据类型 数组名 ;,short x; 或short x ;,short x 60;,创建数组,初始化方式 new操作符方式,数

19、据类型 数组名 = 数据1,数据2,.,数据n;,short x = 1,2,3,4,5,6; char ch = a,b,c,d,e,f;,数据类型 数组名 = new 数据类型元素个数;,short x = new short6;,x0 = 9; x1 = 8;,short x = new short6; int len = x.length; /通过循环给每个数组元素赋值 for(int i=0;ilen;i+)xi=i*2; /通过循环输出每个数组元素的值 for(int i=0;ilen;i+)System.out.print(xi + “ ”);,二维数组的声明格式如下:数据类型

20、数组名; 或数据类型 数组名 ;,short x; float y ;,short x = 1,2,3,4,5,6,7,8,9;float y =0.1,0.2,0.3,0.4,0.5,0.6,0,7,0.8,0.9;,short x = new short33;,float y = new float3;y0 = new float2;y1 = new float3;y2 = new float4;,非等长数组由于各列元素个数不同,只能采取各列单独进行创建的方式,5.4.3 数组的应用举例,数组很适合用来存储和处理同类的一批数据,请看以下几个关于数组的应用例子。【例 5-16】某同学参加了高

21、数、英语、Java语言、线性代数和物理5门课程的考试,假定成绩分别为70、86、77、90和82,请用数组存放其成绩,并计算5门课程的最高分和平均分。,public class Score public static void main(String args) int x=70,86,77,90,82;int max=0; /临时变量int sum=0; /总分for(int i=0;imax)max=xi;sum+=xi; System.out.println(“最高分:“+max);System.out.println(“平均分:“+sum*1.0/x.length); /注意“/”运算

22、 ,程序运行结果如下: 最高分:90 平均分:81.0,【例 5-18】试用冒泡法对10,50,20,30,60和40数列进行降序排序。 public class BubbleSort public static void main(String args) int x=10,50,20,30,60,40;int temp; /临时变量for(int i=1;ix.length;i+) /比较趟次for (int j=0;jx.length-i;j+) /在某趟中逐对比较if(xjxj+1) /交换位置temp=xj;xj=xj+1;xj+1=temp;for(int i=0;ix.lengt

23、h;i+)System.out.print(xi+“ “); /遍历输出排好序的数组元素 ,5.5 数组与方法,有了数组这种构造类型之后,我们可以利用传递数组的首地址值来间接达到传递一批值的目的。,【例 5-20】方法中的数组传递。 public class TestArray public static void main(String args) int x=10,20,30,40,50;display(x);public static void display(int y)for(int i=0;iy.length;i+)System.out.print(yi+“ “); ,5.6 小结,方法是所有程序设计语言的重要概念,同时也是实现结构化程序设计的核心,而结构化程序设计又是面向对象程序设计的基础,因此,掌握方法对于学会编程很重要。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报