第5章-方法和数组67251.ppt_第1页
第5章-方法和数组67251.ppt_第2页
第5章-方法和数组67251.ppt_第3页
第5章-方法和数组67251.ppt_第4页
第5章-方法和数组67251.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

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.print

4、ln( * ); 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(

5、double 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(in

6、t x, int 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(*); Sy

7、stem.out.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;

8、 return 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); /调用方法求

9、面积 System.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)实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的

11、错误。 (4)方法调用中发生的数据传递是单向的,因此在方法调用过程中,若形参的值改变,则实参不会跟着改变。,【例 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

12、=10,y=20,图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,p

14、ublic class Test 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+,高度为+

15、h+的圆柱体体积:+v); ,【例 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

16、 error); else if(n=0|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 m

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

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

19、x 60;,创建数组,初始化方式 new操作符方式,数据类型 数组名 = 数据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

20、(xi + “ ”);,二维数组的声明格式如下: 数据类型 数组名; 或 数据类型 数组名 ;,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 数组的应用举例,数组很适合用来存储和处理同类的一

21、批数据,请看以下几个关于数组的应用例子。 【例 5-16】某同学参加了高数、英语、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

温馨提示

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

评论

0/150

提交评论