资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章,方法,方法是完成特定功能的、相对独立的程序段。方法一旦定义,就可以在不同的程序段中多次调用,故方法可以增强程序结构的清晰度,提高编程效率。本章学习方法的声明和调用。,4.1 方法声明 4.2 方法调用 4.3 参数传递 4.4 递归,4.1 方法声明,在Java程序中,方法只能在类中声明,格式如下: 修饰符 返回值类型 方法名 (参数表) 声明部分 语句部分 ,说明:,方法声明包括方法头和方法体2部分。 修饰符可以是公共访问控制符public、私有访问控制符private、保护访问控制符 protected等。 类型标识符反映方法完成其功能后返回的运算结果的数据类型。 方法名要符合标识符的命名规则,不要与 Java中的关键字重名。 参数表指定在调用该方法时,应该传递的参数的个数和数据类型。 对于有返回值的方法,其方法体中至少有一条return语句。 方法声明不能嵌套,即不能在方法中再声明其它的方法。,例 定义计算平方的方法 static int square(int x) int s; s=x*x; return (s); ,4.2 方法调用,方法表达式 对于有返回值的方法作为表达式或表达式的一部分来调用,其在表达式中出现的形式为: 方法名(实际参数表),例 调用前面定义的方法 public class SquareC static int square(int x) int s; s=x*x; return (s); public static void main(String args) int n = 5; int 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=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( ); ,4.3 参数传递,在调用一个带有形式参数的方法时,必须为方法提供实际参数,完成实际参数与形式参数的结合,称为参数传递,然后用实际参数执行所调用的方法体。 在Java中,参数传递是以传值的方式进行,即将实际参数的值传递给形式参数。,例-交换两个变量的值,public class Swaping static void swap(int x , int y ) int temp ; System.out.println(“Before Swapping“); System.out.println(“x= “+x+“ y= “+y); temp = x; x = y; y = temp; System.out.println(“After Swapping“); System.out.println(“x= “+x+“ y= “+y); ,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(“u= “+u+“ v= “+v); ,输出结果如下所示: Before Calling u= 23 v= 100 Before Swapping x= 23 y= 100 After Swapping x= 100 y= 23 After Calling u= 23 v= 100,实际参数和形式参数值的变化过程如图所示,4.4 递归,所谓递归就是用自身的结构来描述自身,最典型的例子是阶乘运算 的定义。,例:采用递归算法求n!。,递归定义: fac(n)=n*fac(n-1) 当n=1,n=0时,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=Integer.parseInt(args0); f=fac(k); System.out.println(f); ,递归调用过程如下所示:,递归级别 执行操作 0 fac(5) 1 fac(4) 2 fac(3) 3 fac(2) 4 fac(1) 4 返回1 fac(1) 3 返回2 fac(2) 2 返回6 fac(3) 1 返回24 fac(4) 0 返回120 fac(5),例:梵塔(Hanoi)问题,据古印度神话,在贝拿勒斯的圣庙里安放着一块铜板,板上有3根宝石针。梵天(印度教的主神)在创造世界的时候,在其中的一根针上摆放了由小到大共64片中间有空的金片。无论白天和黑夜,都有一位僧侣负责移动这些金片。移动金片的规则是:一次只能将一个金片移动到另一根针上,并且在任何时候以及任意一根针上,小片只能在大片的上面。当64个金片全部由最初的那根针上移动到另一根针上时,这世界就在一声霹雳中消失。,假定用A、B和C分别表示3根针,可以看到,要将n个金片由A针移动到C针,可以分解为以下几个步骤: 将A上的n-1个金片借助C针移动到B针上。 将A针上剩下的一个金片由A针移动到C针上。 将最后剩下的n-1个金片借助A针由B针移动到C针上。 步骤(1)和(3)与整个任务类似,但涉及的金片只有n-1个,是一个典型的递归算法。,class HanoiTower static void moves( char a , char c ) System.out.println(“From “ + a + “ To “ + c); static void hanoi( int n , char a , char b , char c ) if (n = = 1) moves(a, c); else, hanoi(n - 1, a, c, b); moves(a, c); hanoi(n - 1, b, a, c); public static void main(String args) int n ; n = Integer.parseInt(args0); hanoi(n, A, B, C); ,运行程序时,为变量n输入值3,运行结果如下所示。 From A To C From A To B From C To B From A To C From B To A From B To C From A To C,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号