第5章+Java方法.ppt_第1页
第5章+Java方法.ppt_第2页
第5章+Java方法.ppt_第3页
第5章+Java方法.ppt_第4页
第5章+Java方法.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第五讲,Java方法,授课方式:投影演示 教学目标:让学生掌握方法的基本概念 教学内容:1、方法定义的格 2、方法的参数和值 教学重点:形参和实参的概念,返回值 教学难点:形参和实参的运用 课时安排:2课时,第5讲 方法,方法的概述 方法定义 方法的参数与值 方法的调用 方法的嵌套调用 方法的递归调用 变量的作用域,方法的概述,方法对执行重复或共享的任务很有用,可以在代码中的许多不同位置调用方法 优点: 方法允许将程序分为不连续的逻辑单元。 便于程序的修改,方法的分类,从方法和过程两种功能这一角度 有返回值方法 无返回值方法 从主调方法和被调方法之间数据传递的角度 无参方法 有参方法,【实例】

2、 求 n!,创建一个C#程序,并定义一个方法Factor(n),计算n!,输入n的值,调用Factor(n)方法计算1!至n!,并在屏幕上输出。(如下图n=9时的结果),请输入n的值:9 1!=1 2!=2 3!=6 4!=24 5!=120 6!=720 7!=5040 8!=40320 9!=362880,代码分析与讨论,static void Main(string args) Scanner input = new Scanner(System.in); System.out.println(请输入n的值:); int n=0; long f; n =input.nextInt( );

3、 MyMath mymath = new MyMath(); for (int i = 1; i =n; i+) f = mymath. Factor(i); System.out.println(i+!=“+f); ,Class MyMath public long Factor(int n) long fa = 1; for (int i = n; i = 1; i-) fa *= i; return fa; ,方法定义的格式,无参方法的定义形式 返回类型 方法名() 声明部分 语句 ,有参方法定义的一般形式 返回类型 方法名(形式参数表列) 声明部分 语句 ,【实例】求两个数中的大数,P

4、ublic class MyMath public int max(int a, int b) if (a b) return a; else return b; ,static void Main(string args) Scanner input = new Scanner(System.in); int x,y,z; MyMath mymath = new MyMath(); System.out.print(请输入两个数字:); x = input.nextInt(); y = input.nextInt(); z= mymath.max(x,y); System.out.print

5、ln(最大数字为:“+z); ,方法的参数与值,形式参数和实际参数 返回值 方法的返回值是通过方法体中的return语句获得的,return语句后面表达式的值为方法的返回值。,【实例】 形参与实参,static void Main(string args) int n=0; Scanner input = new Scanner(); MyMath mymath = new MyMath(); System.out.print(input numbern); n = input.nextInt( ); mymath.s(n); System.out.println(“n=“+n); Conso

6、le.Read(); ,public class MyMath public int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; System.out.println(n=“+n); return n; ,习题,1、编写一个程序,输入一个球的半径(double类型),然后调用sphereVolum计算并显示球的体积。计算球的体积的公式是: Volum=4/3*pi*Radius3) 2、编写方法intergerPower(base,exponect),返回base的exponent次幂值。例如:intergerPower(3,4)=34设exponent是

7、一个正整数,base也是一个整数。编写程序调用intergerPower方法。,方法的调用,在程序中是通过对方法的调用来执行方法体的 #语言中,方法调用的一般形式为: 方法名(实际参数表) 【提示】在方法调用中,参数值的数量、类型和顺序必须与方法头中的参数完全对应。,参数传递,方法的定义是在类的设计中进行的,方法的使用是在实际运行中进行的,定义方法的时候使用形式参数(形参),而调用方法时候,用实际参数(实参)取代形式参数,这个过程称为参数传递。 向方法传递参数有两个方法,一个是“传值”,另一个是“传引用”。,传值,值传递就是实参将值复制给形参,系统要为形参开设存储空间,以接受传递的值,此时形参

8、成为一个实在的局部变量 实参和形参脱离关系,形参在方法中参与运算,在运算中发生的任何变化都不会影响实参,【实例】 值传递,static void Main(string args) int i = 1, j = 2; MyMath mymath = new MyMath( ); mymath.Swap(i, j); System.out.println(i=“ + i + j=“ + j); ,编译上述代码,程序将输出: i=1,j=2,public class MyMath public void Swap(int x, int y) int temp = x; x = y; y = tem

9、p; ,方法的嵌套调用 方法的递归调用 变量的作用域,方法的嵌套调用,#语言允许在一个方法的定义中出现对另一个方法的调用。这样就出现了方法的嵌套调用。,【实例】方法的嵌套调用,题目:计算s=22!+32! 解题思路: 本题可编写两个方法,一个是用来计算平方值的方法f1,另一个是用来计算阶乘值的方法f2。主方法先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主方法,在循环程序中计算累加和。,代码分析与讨论,public class MyMath public long f1(int p) int k; long r; k=p*p; r=f2(k); r

10、eturn r; public long f2(int q) long c=1; int i; for(i=1;i=q;i+) c=c*i; return c; ,static void Main(string args) int i; long s=0; for (i=2;i=3;i+) s=s+f1(i); System.out.println (s=+s); ,方法嵌套的练习,已知组合数 求对于任意m、n时的值。,方法的递归调用,一个方法在它的方法体内调用它自身称为递归调用。这种方法称为递归方法。 在递归调用中,主调方法又是被调方法。执行递归方法将反复调用其自身,每调用一次就进入新的一层

11、。,例如有方法f如下: public int f(int x) int y; z=f(y); return z; ,简单方法递归的例子,计算n!,public int Factorial( int n ) int p = n; if( n1 ) p *=Factorial(n-1); return p; ,【实例】Hanoi塔问题,题目要求:一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如图11-4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。,【实

12、例】Hanoi塔问题,解题思路: 当n大于等于2时,移动的过程可分解为三个步骤: 第一步 把A上的n-1个圆盘移到B上; 第二步 把A上的一个圆盘移到C上; 第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。 当n=3时,第一步和第三步又分解为类同的三步,即把n-1个圆盘从一个针移到另一个针上,这里的n=n-1。,【实例】Hanoi塔问题,Public class Hanoi public void move(int n,char x,char y,char z) if(n=1) System.out.println(x+-”+z); else move(n-1,x,z,y);

13、 System.out.println(x+-”+z); move(n-1,y,x,z); ,【实例】Hanoi塔问题,static void Main(string args) int h; Scanner scan = new Scanner(System.in); Hanoi hanoi = new Hanoi( ); System.out.println(input number:); h= scan.nextInt(); System.out.println(the step to moving “+h+” diskes:); hanoi.move(h,a,b,c); ,递归方法的练

14、习,编写一个递归方法,该方法由用户输入两个数num和n,可以计算num的n次方。,综合习题,编写一个求水仙花数的方法,然后通过主方法调用该方法求100999之间的全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数本身。例如:153就是一个水仙花数:153=1*1*1+5*5*5+3*3*3,综合习题,请编写一个函数,输出整数m的全部素数因子。例如:m=120时,素数因子为: 2,2,2,3,5,局部变量,在程序中,任何变量都有生命期、作用域和可见性的变化。 C#的局部的语法区域是指方法或方法内的代码块。,Public class Program int x; void Ran

15、geTesting(int i) int x; x = i; for (int j = i; j 6; j+) x += j; System.out.print(在代码块中 x=“+x); System.out.print(局部变量x离开代码块,仍在方法中,x=“+ x); System.out.print(字段x在方法中,字段x=“+this.x); void TestingAgain() System.out.print(离开局部变量x所在的方法,x=“+ x); ,【实例】,代码分析与讨论,static void Main(string args) Program mys = new P

16、rogram(); mys.RangeTesting(3); mys.TestingAgain(); System.out.println(在Main方法中,x= + mys.x); ,静态多态(方法重载),不止是构造方法可以重载,其实任何方法都能重载 方法重载:就是在同一个类中具有相同名称,执行基本相同操作,但是使用不同的参数列表的一组方法 编译器通过参数的个数和类型确定调用重载方法的哪个版本 例:System.out.println(String); System.out.println(int);,重载类型,参数类型不同 int add(int,int); float add(float

17、,float); 参数个数不同 int add(int,int); int add(int,int,int); 注意:若参数类型和个数都相同,返回类型不同不算重载,方法重载的作用域规则,重载机制只有在方法声明的同一作用域内才有效,class first public: void display(); class second public: void display(); ,void main() first object1; second object2; /没有发生方法重载 object1.display() object2.display(); ,讲解习题,1、编写minimum3方法,

18、求3个浮点数种的最小值。由用户输入3个值,调用minimum3方法确定最小值,并显示该最小值。 2、计算机在教育中的作用越来越大。编写一个程序帮助小学生学习乘法。利用Math.Random产生两个正的一位整数,并显示出题目,如:6乘3的积是多少?学生在提示下输入结果。程序检查该学生的答案,如果答案正确,打印出“非常棒”,并再出一道题。如果答案错误,打印字符串“不对,请再试一次”再让学生重做该题,直到做正确为止。利用一个方法来产生题目。,讲解习题,3、更复杂的计算机辅助教学系统可以监测学生在一段时间内的表现。修改习题2的程序累计回答问题的正确和错误次数。在学生回答10个问题以后,程序计算出回答问题的正确率,若低于75%,程序应打印出“请你的老师给你辅导一下”。,讲解习题,4、如下图所示的程序中,若实参a与形参x以引用调用(call by reference)的方式传递信息,则输出结果为_;若实参a与形参x以值调用(call by value)的方式传递信息,那么输出结果为_。,讲解习题,5、如下图所示的程序中,若调用f1(x)时,参数传递采用传值

温馨提示

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

评论

0/150

提交评论