文本第五讲方法_第1页
文本第五讲方法_第2页
文本第五讲方法_第3页
文本第五讲方法_第4页
文本第五讲方法_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第五讲 方法本章要点对方法的理解方法的声明方法的调用参数的传递方法的重载递归与迭代方法概述通过前面章节的程序结构我们可以看到,对简单的问题,程序比较简单,一个程序是一个类,在类中包含一个main()方法。但解决一些比较复杂的问题时,按照现代模块化程序设计的思想,应仔细分析问题,善于将这些复杂问题分解成若干个相对简单的问题,即划分成多个模块。这样,解决一个复杂问题就转化为一些简单的问题。方法概述JAVA中有两种模块:方法和类。借助Java API和其他各种类库中可用的、“预先打好包”的方法和类,我们可以编写出新的方法和类。在程序设计时,可以将一个程序中完成特定功能的程序定义成方法(有时在其他编程

2、语言中称为函数或过程)。在需要使用这些功能时,可调用相应的方法,特别是在某些功能多次被使用时,采用方法可大大地提高程序代码的可重用性。方法概述“方法”的目的:一是“分而治之”;二是软件的重用;三是避免在程序中重复代码。常用的Math类的方法和String类的方法方法的声明使用打印三个矩形的实例说明方法的声明方法声明的一般格式为:修饰符1 修饰符2 .返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.) 程序代码 return 返回值 补充:声明方法时使用的参数称为形式参数(形参),调用方法时使用的参数称为实际参数(实参)。方法头方法体方法的声明声明方法应注意:在类体的“ ”外定

3、义方法,是语法错误方法名可以是任何合法的标识符返回值类型可以是任何基本数据类型、String和void(表示方法不返回值),方法至多可以返回一个值,且返回值类型是不可省略的如果指定的返回值类型不是void,则方法中必须包含一条return语句,返回指定类型的值,同样在返回值类型为void的方法中返回一个值也是一种语法错误方法的声明声明方法应注意(接上页)方法头“()”中的形参用逗号分隔,且用add(int a,b)代替add(int a,int b)是一种错误方法头“()”的右端不能放置“;”在方法体中将形式参数重新声明是一种语法错误方法的声明方法按是否有参数可分为有参方法和无参方法: 例 定

4、义计算平方的方法(有参方法) static int square(int x) int s; s=x*x; return (s); 方法的声明例 求最大值的方法 int max3(int x,int y,int z) int big; if(xy) big=x; else big=y; if(bigmax) max=x; else max=y; return max; 方法的声明对象方法是没有static修饰符修饰的方法,必须生成对象实例才能够使用该方法。如:class Car int speed; /变量定义部分。 float weight,height; /变量定义部分。 void cha

5、ngSpeed(int newSpeed) /对象方法定义。 speed=newSpeed; float getWeight() /对象方法定义。 return weight; float getHeight() /对象方法定义。 return height; 方法的调用1、类方法调用 类方法可以直接调用或通过类名.方法名(实参)调用,不需生成对象。 对于有返回值的类方法作为表达式或表达式的一部分来调用,其在表达式中出现的形式为:方法名(实际参数表)方法的调用例 调用类方法public class SquareC static int square(int x) /类方法 int s; s=x

6、*x; return (s); public static void main(String args) int n = 5; int result; result= square(n);/类方法调用 System.out.println(result); 方法的调用对于没有返回值的类方法,以独立语句的方式调用方法。例:class AreaC static void area(int a , int b ) int s; s = a * b; System.out.println(s); public static void main(String args) int x = 5; int y

7、=3; area(x, y); /方法语句,直接调用类方法 方法的调用例 无参类方法调用class SumC static void sum( ) int i, j, s; i=3; j=6; s=i+j; System.out.println(s); public static void main(String args) sum( ); 方法的调用2、对象方法调用对于对象方法,必须先生成对象实例,然后用如下形式调用方法: 对象名.方法名(实参)class MyObjectstatic int x=10;static int y=20;void method(int k,int m)int

8、sum;sum=k+m;System.out.println(sum=+sum);public static void main(String args)MyObject obj=new MyObject(); /生成对象obj.method(x,y); /调用对象方法方法的调用/对象方法(实例方法)调用示例:class Car int speed; /变量定义部分。 float weight=12,height=2; /变量定义部分。 void changSpeed(int newSpeed) /对象方法定义。 speed=newSpeed; float getWeight() /对象方法定

9、义。 return weight; float getHeight() /对象方法定义。 return height; public static void main(String args) Car myCar=new Car( ); myCar.changSpeed(120); System.out.println(车速度为:+myCar.speed); System.out.println(车的重量为:+myCar.getWeight(); System.out.println( 高度为:+myCar.getHeight(); 方法的调用/对象方法(实例方法)调用示例:注意x,y的值是否

10、变化?文件名如何命名?class Tom void f(int x,double y) x=x+1; y=y+1; System.out.println(参数x和y的值分别是:”+x+” ,”+y); public class Example public static void main(String args) int x=10; double y=12.58; Tom tom=new Tom(); tom.f(x,y); System.out.println(main方法中x和y的值仍然分别是:“+x+” ,”+y); 参数的传递参数传递要点:虚实结合“三一致”原则即实参与虚参个数、类型

11、、顺序一致。例4-5 参数传递实例public class Swaping static void swap(int x , int y ) int temp ; temp = x; x = y; y = temp; public static void main(String args) int u=23 , v=100; System.out.println(Before Calling); System.out.println(u= +u+ v= +v); swap(u, v); System.out.println(After Calling); System.out.println(

12、u= +u+ v= +v); 参数的传递class Lader double above,bottom,height; public void setAbove(double a) above=a; public void setBottom(double b) bottom=b; public void setHeight(double h) height=h; double computeArea() return (above+bottom)*height/2.0; public class Example public static void main(String args) dou

13、ble area=0; Lader laderOne=new Lader(); laderOne.setAbove(10); laderOne.setBottom(40); laderOne.setHeight(2); puteArea(); System.out.println(laderOne的面积是:+area); 方法的嵌套在解决较为复杂的问题时,用到方法调用的地方比较多。如果在一个方法的方法体中又调用了另外的方法,这就被称为方法的嵌套调用,也称方法的嵌套。【例4-7】用方法的嵌套求立方体的体积程序分析: main()方法中,调用vol()方法求立方体的体积,转到vol()方法体中又调

14、用了area()方法求面积。这种在调用一个方法vol()的方法体中又调用另外的一个方法area()的做法,就是方法的嵌套方法的嵌套public class Volume public static void main(String args ) int i=5,j=6,k=7,v; v=vol(i,j,k); System.out.println(立方体的体积为:+v); static int vol(int a,int b,int c) /求体积的vol()方法 return(a*area(b,c); static int area(int x,int y) /求面积的area()方法 re

15、turn(x*y); 递归方法嵌套中更为特别的是,如果在被调用一个方法的方法体中又调用一个方法,而这个方法正是它自身,即:如果在一个方法的方法体中又调用它自身的方法嵌套称为方法的递归。递归例:采用递归算法求n!fac(n)=1 n=1n*fac(n-1)递归class Factorial static long fac( int n ) if (n=1 ) return 1; else return n*fac(n-1); public static void main(String args) int k ; long f; k=25; f=fac(k); System.out.printl

16、n(f);递归例:Fibonacci数列是这样的一列数: 1,1,2,3,5,8,13,21,34,55,第n个Fibonacci数的递归描述为:public class Fibo public static void main(String args ) for(int i=1;i=20;i+) System.out.print(f(i)+ ); if (i%10= =0)System.out.println(); static int f(int n) if(n= =1|n= =2)return 1; else return(f(n-2)+f(n-1); 递归从程序设计的角度来说,递归调用

17、必须解决两个问题:一是递归计算的公式,二是递归结束的条件。每一个要使用递归的方法解决的问题,都要先考虑好这两个方面。 如本例说到的递归描述中就包含了这两个条件,其中: 递归计算公式:f(n)=f(n-2)+f(n-1) 递归结束条件:f(1)=1,f(2)=1递归汉诺塔问题(P204 6.37)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。解答结果请自己运行

18、计算,程序见尾部。面对庞大的数字(移动圆片的次数)18,446,744,073,709,551,615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。后来,这个传说就演变为汉诺塔游戏: 1.有三根杆子A,B,C。A杆上有若干圆盘2.每次移动一个圆盘,小的只能叠在大的上面3.把所有圆盘从A杆全部移到C杆上递归移动n个圆盘可以看成只移动n-1个圆盘再加上移动最后一个(最大)圆盘的过程:从A移动n-1个圆盘到B,C做临时的存放从A移动最后一个圆盘到C从B移动n-1个圆盘到C,A做临时的存放柱子A柱子B柱子C递归递归结束的条件为:n=1时,从A移动最后一个圆盘到C我们可定义方法hanoi(int n,char a,char b,char c)表示移动n个圆盘从a到c,以b做临时的存放moves(c

温馨提示

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

评论

0/150

提交评论