《第6章-方法--Java程序设计语言教学课件.ppt》由会员分享,可在线阅读,更多相关《第6章-方法--Java程序设计语言教学课件.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6Java程序设计程序设计2学习目标l学习如何在类中建立方法l理解方法调用、参数传递和重载方法6.1 定义方法Java语言定义方法的语法结构如下:1.返回值 方法的返回值是指方法运行结束时产生的一个结果,返回值类型说明了方法返回值的数据类型。如果一个方法只是执行某些特定的操作,不产生返回值,则返回值类型为关键字void,该类方法称为void方法。2.方法名 方法名使用Java语言标识符命名。建议方法名用一个动词或动词短语,命名时采用小写字母,当由多个单词构成时,从第二个单词开始首字母大写。6.2 调用方法 定义方法的目的是在程序中使用它,在程序中使用方法称为调用方法。根据方法是否有返回值可以
2、把方法调用分成两类:方法调用表达式和方法调用语句。1.方法调用表达式 方法调用表达式形式用于对有返回值方法的调用,将方法调用作为一个表达式或表达式的一部分。这种调用的目的就是要使用方法调用产生的返回值。举例:int big=max(10,100);/max方法调用的值被赋值给变量 System.out.println(max(10,100);/max方法调用的值被输出 int sum=max(x,y)+200;/max方法调用的值参与算术运算 2.方法调用语句 void方法的调用必须采用语句形式。例如:System.out.println(welcome to java);/调用void方法的
3、语句 注意事项:方法调用时出现在括号内的常量、变量或表达式称为实际参数,简称实参。其作用是向形参提供数据。Java语言也允许以语句形式调用有返回值的方法,此时方法的返回值被忽略了。如果程序对某个方法的返回值不感兴趣,可以采用语句形式调用。方法调用的执行流程 一个方法中调用另一个方法时,程序的流程从发生方法调用的位置离开转移到被调用的方法,当被调用方法中碰到return或执行完最后一条语句时,程序流程重新回到调用者方法继续后面操作的执行6.3 参数的值传递 在调用定义了形参的方法时需要把实参的值传递给形参,Java语言规定:实参必须与方法定义中的形参在次序和数量上匹配,在数据类型上兼容。数据类型
4、兼容是指实参与形参的数据类型相同或者实参不必经过强制类型转换就可以将值赋给形参。实参向形参的传递数据是单向值传递。只能是实参将值传递给形参,在被调用方法的执行过程中,无论形参的值发生怎样变化都不会反过来影响实参的值。举例:/文件名:ParameterPass.javapublic class ParamterPass public static void main(String args)int x=10,y=100;System.out.printf(调用swap方法之前:x=%d,y=%dn,x,y);s);System.out.printf(调用swap方法之前:x=%d,y=%dn,x
5、,y);public static void s a,int b)int temp;System.out.println(t在swap方法内:);System.out.printf(tt交换a,b之前:a=%d,b=%dn,a,b);temp=a;a=b;b=temp;System.out.printf(tt交换a,b之后:a=%d,b=%dn,a,b);6.4 方法重载 Java语言允许在一个类中的两个或更多的方法具有相同的方法名称但有不同的形式参数列表,称为方法重载。首先实参和形参的数量必须相同,然后考虑以下几种情况:(1)如果找到1个形参与实参的类型完全相同的方法,则调用该方法;(2)否
6、则,如果找到1个需要通过自动类型类型转换可以进行参数传递的方法,则调用该方法;(3)否则,如果找到多个需要通过自动类型类型转换可以进 行参数传递的方法,并且其中一个方法的形参与实参最接近,则调用该方法;(4)否则,如果找到多个需要通过自动类型类型转换可以进 行参数传递的方法,但其中形参与实参最接近的方法多于1个,则无法调用,编译出错。/返回2个int数据的大值 public static int max(int a,int b)return a b?a:b;/返回2个double数据的大值 public static double max(double a,double b)return a
7、b?a:b;/返回3个double数据的大值 public static double max(double a,double b,double c)return max(max(a,b),c);方法重载可以使程序清晰易读,并减少记忆方法名称的难度。定义完成相似任务的方法时应该使用重载,即给予相同的方法名和不同的形参列表。需要注意的是,方法的返回值类型和修饰符不能作为重载方法时区别方法的依据。/文件名:ReverseArray.java public class ReverseArray public static void main(String args)int list1=1,2,3,4
8、,5,6,7,8,9,0;System.out.print(调用reversInSameArray前,list1:);outputArray(list1);reverseInSameArray(list1);System.out.print(调用reversInSameArray后,list1:);outputArray(list1);int list2=1,2,3,4,5,6,7,8,9,0;int list3=null;System.out.print(调用reverseInNewArray前,list2:);outputArray(list2);list3=reverseInNewArr
9、ay(list2);System.out.print(调用reverseInNewArray后,list2:);outputArray(list2);System.out.print(调用reverseInNewArray后,list3:);outputArray(list3);/输出一个数组所有元素的方法,本方法没有改变数组变量array的值,/也没有改变数组的内容 public static void outputArray(int array)for(int value:array)System.out.print(value+);System.out.println();/在原数组中进
10、行元素逆序的方法,本方法没有改变数组变量的值,但改变了数组的内容 public static void reverseInSameArray(int array)for(int i=0,j=array.length-1;i j;i+,j-)int temp=arrayi;arrayi=arrayj;arrayj=temp;/产生一个与原数组元素逆序的新数组,本方法改变了数组变量的值,/但没有改变原数组的内容 public static int reverseInNewArray(int array)int old=array;array=new intold.length;for(int i=
11、0,j=array.length-1;i 2/文件名:Fibonacci.javaimport java.util.Scanner;public class Fibonacci public static void main(String args)Scanner input=new Scanner(System.in);long n=input.nextLong();System.out.println(fibonacci(+n+)=+fibonacci(n);public static long fibonacci(long n)if(n=1)return 1;else if(n=2)re
12、turn 1;else return fibonacci(n-1)+fibonacci(n-2);例6-7:汉诺塔问题。这个问题目标是把若干个大小互不相同的盘子从一个柱子移动到另一个柱子,移动时遵循的规则:有n个编号从1到n的盘子,三个命名为A、B、C的柱子;任何时候只能把较小的盘子放在较大的盘子上面;开始时所有盘子都在A柱上面;每次只能移动柱子最上面的一个盘子。目标是将所有的盘子借助C柱从A柱移到B柱。要求输出移动盘子的过程。解题思路:汉诺塔问题初看起来非常复杂,但使用递归方法的思路解决却又非常直观。汉诺塔问题的终止状态是n=1,此时直接将盘子从A移到B即可。当n1时,把问题分解为以下三个步
13、骤解决:第1步:借助B把n-1个盘子从A移到C。第2步:把盘子n从A移到B。第3步:借助A把n-1个盘子从C移到B。/文件名:HanoiTower.javaimport java.util.Scanner;public class HanoiTower public static void main(String args)Scanner input=new Scanner(System.in);System.out.print(输入盘子的个数:);int n=input.nextInt();System.out.println(从A移动+n+个盘子到B的步骤如下:);move(n,A,B,C);/形式参数:n-盘子个数,from-起始柱,to-目标柱,mid-借助的柱 public static void move(int n,char from,char to,char mid)if(n=1)/终止状态 System.out.printf(盘子%d从%c移到%cn,n,from,to);else move(n-1,from,mid,to);System.out.printf(盘子%d从%c移到%cn,n,from,to);move(n-1,mid,to,from);课后工作l复习本章内容l课后做本章后面的练习。Java程序设计程序设计36
限制150内