JAVA程序设计第四章教学课件.ppt

上传人:牧羊曲112 文档编号:5436164 上传时间:2023-07-06 格式:PPT 页数:39 大小:307KB
返回 下载 相关 举报
JAVA程序设计第四章教学课件.ppt_第1页
第1页 / 共39页
JAVA程序设计第四章教学课件.ppt_第2页
第2页 / 共39页
JAVA程序设计第四章教学课件.ppt_第3页
第3页 / 共39页
JAVA程序设计第四章教学课件.ppt_第4页
第4页 / 共39页
JAVA程序设计第四章教学课件.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《JAVA程序设计第四章教学课件.ppt》由会员分享,可在线阅读,更多相关《JAVA程序设计第四章教学课件.ppt(39页珍藏版)》请在三一办公上搜索。

1、方法,Chapter 4,学习目标,理解和使用方法理解和调用方法理解在方法中参数的作用向方法传递基本类型参数理解方法重载熟悉MATH类熟悉递归,4.1 引言,Java程序是由一个个类定义组成的,类有两个部分:属性和方法。属性描述类是什么,方法描述类做什么。任何对象都有独立的内存存储它的属性。类的所有的对象共享存贮在内存的方法。换言之:方法是类的主要组成部分。在一个类中,程序的作用体现在方法中。方法即是JAVA创建一个有名字的子程序。一个主方法和若干个子方法构成。主方法调用其他方法,其他方法间也可互相调用,同一个方法可被一个或多个方法调用任意次。,4.1 引言,Java程序的基本结构如下:引入J

2、ava类库;定义用户类1定义类1的若干变量或对象:定义类1的方法1;定义类1的方法2;定义类1的方法M1;定义用户类2定义类2的若干变量或对象:定义类2的方法1;定义类2的方法2;定义类2的方法M2,4.1 引言,Java语言的方法实现子任务处理时,有下面几个原则与规律:(1)算法中需要细化的步骤、程序中重复的代码以及重载父类方法都可以定义成类的方法。(2)界面清晰。(3)大小适中。(4)方法有两种:一种是标准方法,Java API提供了丰富的类和方法,这些方法提供了程序员所需的许多功能。另一种是用户自定义的方法,以解决用户专门需要。(5)Java应用程序中,程序的执行从main方法开始,调用

3、其他方法后又回到main方法,在main方法中结束整个程序的运行。,4.2 创建方法,Java中声明方法的语法如下:修饰符 返回值类型 方法名(参数列表)方法体:局部变量声明;语句序列;,类的方法,又称为成员函数,用来规定类属性上的操作,实现类的内部功能的机制,同时也是类与外界进行交互的重要窗口。,4.2创建方法-声明方法头1声明方法头 方法头一般由方法名、参数列表、返回类型、方法修饰符,(1)方法名可以是任何有效的标识符,命名规则与标识符命名规则相同。(2)类型说明符用来指定方法返回值的类型,方法最多只能返回一个值。(3)参数列表是方法的输入接口,它列出了一系列形式参数的类型和名称,在方法参

4、数表的右括号后加一个分号是语法错误。参数表以逗号为分隔符,其中包含了方法被调用时传递给方法的参数说明。对于方法定义中的每一个参数,方法调用时必须有一个参量与之对应,而且该参量的类型必须与对应参数类型相一致。,4.2创建方法-声明方法体,方法头定义了方法的性质,方法体则定义了方法的具体内容。方法体通常起到两种作用,一是围绕类的属性进行各种操作;二是与其他的类与对象进行数据交流、消息传递等操作。在一个方法中定义另一个方法将产生语法错误。(1)最好避免局部变量“屏蔽”实例变量,在一个类中不使用同名标识符就可以做到这一点;方法调用中参数用来传递数值、传递引用,同时方法还可以嵌套、递归调用。(2)方法体

5、中如果指定了非void的返回值类型,方法中就必须包含一条return语句保证任何情况下都有返回数值,return语句后面不能跟任何表达式;,4.2创建方法-声明方法体,例如下面的语句为部门类Department定义了若干方法:Class Department int m_ DeptNo;部门编号 String m_DeptName;部门名称 int m_DeptTotalEmp;部门雇员数 ManagerEmployee m_DeptMgr;部门主管 int getDeptNo()获取当前对象的部门号 return _DeptNo;返回这个对象的部门号,4.3 方法的调用,在类中调用类自身的方

6、法,可以直接使用这个方法的名称;调用其他对象或类的方法,则需要使用该对象或类为前缀。,01/app7_3,方法的创建02 class CRectangle03 04 int width;05 int height;06 int area()/定义函数成员area(),用来计算面积07 08 return width*height;09 10 11 int perimeter()/定义函数成员perimeter(),用来计算周长12 13 return 2*(width+height);14 15 16 17 public class app7_318,19 public static void

7、 main(String args)20 21 CRectangle rect1;22 rect1=new CRectangle();/创建新的对象23 24 rect1.width=10;/赋值长方形rect1的宽25 rect1.height=5;/赋值长方形rect1的高26 27 System.out.println(area=+rect1.area();28 System.out.println(perimeter=+rect1.perimeter();29 30/*app7-3 OUTPUT-area=50perimeter=30-*/,方法的运行过程,例4.1测试max方法,pu

8、blic class TestMax/Main method public static void main(String args)int i=5;int j=2;int k=max(i,j);System.out.println(The maximum between+i+and+j+is+k);static int max(int num1,int num2)if(num1 num2)return num1;else return num2;,4.4 参数的传递,方法的威力是它处理参数的能力。调用方法时,需要提供实参,他们必须与方法中所对应的形参次序相同,这叫参数顺序匹配。,void n

9、Println(String message,int n)for(int i=0;in;i+)System.out.println(message);,参数按值传递在调用带参数的方法时,实参的值复制到方法中称为值传递。无论方法中的形参怎样变化,方法外的实参不受影响。,例4.2测试按值传递,public class TestPassByValue/Main method public static void main(String args)/Declare and initialize variables int num1=1;int num2=2;System.out.println(Bef

10、ore invoking the swap method,num1 is+num1+and num2 is+num2);/Invoke the swap method to attempt to swap two variables swap(num1,num2);System.out.println(After invoking the swap method,num1 is+num1+and num2 is+num2);,例4.2测试按值传递,/The method for swapping two variables static void swap(int n1,int n2)Syst

11、em.out.println(Inside the swap method);System.out.println(Before swapping n1 is+n1+n2 is+n2);/Swapping n1 with n2 int temp=n1;n1=n2;n2=temp;System.out.println(After swapping n1 is+n1+n2 is+n2);,4-5方法重载 方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。例:double max(double num1,double nu

12、m2)if(num1 num2)return num1;else return num2;,例4.3重载max方法,public class TestMethodOverloading/Main method public static void main(String args)/Invoke the max method with int parameters System.out.println(The maximum between 3 and 4 is+max(3,4);/Invoke the max method with the double parameters System.

13、out.println(The maximum between 3.0 and 5.4 is+max(3.0,5.4);/Invoke the max method with three double parameters System.out.println(The maximum between 3.0,5.4,and 10.14 is+max(3.0,5.4,10.14);,例4.3重载max方法,/Find the max between two int values static int max(int num1,int num2)if(num1 num2)return num1;e

14、lse return num2;/Find the max between two double values static double max(double num1,double num2)if(num1 num2)return num1;else return num2;,/Find the max among three double values static double max(double num1,double num2,double num3)return max(max(num1,num2),num3);,4.7math类,4.7math类,random()Return

15、s a random double value in the range 0.0,1.0).cos(double a)tan(double a)acos(double a)asin(double a)atan(double a)Class constants:PIE,例4.4计算平均值和标准差,public class ComputeMeanDeviation/Main method public static void main(String args)int number=0;/Store a random number double sum=0;/Store the sum of the

16、 numbers double squareSum=0;/Store the sum of the squares1、计算2、输出,例4.4计算平均值和标准差,1、计算for(int i=0;i10;i+)/Generate a new random number number=(int)Math.round(Math.random()*1000);System.out.println(number);/Add the number to sum sum+=number;/Add the square of the number to squareSum squareSum+=Math.pow

17、(number,2);/Same as number*number;/Find mean double mean=sum/10;/Find standard deviation double deviation=Math.sqrt(squareSum-mean)/(10-1);,例4.4计算平均值和标准差,2、输出/Display result System.out.println(The mean is+mean);System.out.println(The standard deviation is+deviation);,例4.5显示日历,public class PrintCalen

18、dar/Main method public static void main(String args)/The user enters year and month System.out.print(Enter full year:);int year=MyInput.readInt();System.out.print(Enter month in number between 1 and 12:);int month=MyInput.readInt();/Print calendar for the month of the year printMonth(year,month);,例4

19、.5显示日历,/Print the calendar for a month in a year static void printMonth(int year,int month)/Get start day of the week for the first date in the month int startDay=getStartDay(year,month);/Get number of days in the month int numOfDaysInMonth=getNumOfDaysInMonth(year,month);/Print headings printMonthT

20、itle(year,month);/Print body printMonthBody(startDay,numOfDaysInMonth);,例4.5显示日历,/返回该月的第一天是星期几?static int getStartDay(int year,int month)/Get total number of days since 1/1/1800 int startDay1800=3;long totalNumOfDays=getTotalNumOfDays(year,month);/Return the start day return(int)(totalNumOfDays+star

21、tDay1800)%7);,例4.5显示日历,/Get the total number of days since Jan 1,1800 static long getTotalNumOfDays(int year,int month)long total=0;/Get the total days from 1800 to year-1 for(int i=1800;i year;i+)if(isLeapYear(i)total=total+366;else total=total+365;/Add days from Jan to the month prior to the calen

22、dar month for(int i=1;i month;i+)total=total+getNumOfDaysInMonth(year,i);return total;,例4.5显示日历,/Get the number of days in a month static int getNumOfDaysInMonth(int year,int month)if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)return 31;if(month=4|month=6|month=9|month=11)return 30;if

23、(month=2)if(isLeapYear(year)return 29;else return 28;return 0;/If month is incorrect.,例4.5显示日历,/Determine if it is a leap year static boolean isLeapYear(int year)if(year%400=0)|(year%4=0),例4.5显示日历,/Print month body static void printMonthBody(int startDay,int numOfDaysInMonth)/Pad space before the fi

24、rst day of the month int i=0;for(i=0;i startDay;i+)System.out.print();for(i=1;i=numOfDaysInMonth;i+)if(i 10)System.out.print(+i);else System.out.print(+i);if(i+startDay)%7=0)System.out.println();System.out.println();,例4.5显示日历,/Print the month title,i.e.May,1999 static void printMonthTitle(int year,i

25、nt month)System.out.println(+getMonthName(month)+,+year);System.out.println(-);System.out.println(Sun Mon Tue Wed Thu Fri Sat);,例4.5显示日历,/Get the English name for the month static String getMonthName(int month)String monthName=null;switch(month)case 1:monthName=January;break;case 2:monthName=Februar

26、y;break;case 3:monthName=March;break;case 4:monthName=April;break;case 5:monthName=May;break;case 6:monthName=June;break;case 7:monthName=July;break;case 8:monthName=August;break;case 9:monthName=September;break;case 10:monthName=October;break;case 11:monthName=November;break;case 12:monthName=Decem

27、ber;return monthName;,4-9 递归方法,方法也可以用在递归(recursive),所谓递归就是方法本身自己调用自己。例如阶乘函数(factorial function),便可利用递归的方式来完成:,递归可让程序代码简洁,也可提高运行的效率,但使用时须注意到递归函数一定要有可以结束运行的终止条件,使函数得以返回上层调用的地方,否则容易造成无穷循环,最后因内存空间不足而当掉。,fac(n)=1*2*L*N,n=1(非递归算法)=n*(fac(n-1),n=1(递归算法),public class ComputeFactorial public static void main

28、(String args)/Prompt the user to enter an integer System.out.println(Please enter a nonnegative integer);int n=MyInput.readInt();System.out.println(Factorial of 5 is+factorial(n);/Recursive method for computing factorial of n static long factorial(int n)if(n=0)/Stopping condition return 1;else retur

29、n n*factorial(n-1);/Call factorial recursively,当n=1 时返回1,否则返回n*fac(n-1)。本例计算fac(4)=4*3*2*1=1-24,其递归计算的过程如图 所示。,例4.7计算Fibonacci数列,public class ComputeFibonacci/Main method public static void main(String args)/Read the index System.out.println(Enter an index for the Fibonacci number);int n=MyInput.rea

30、dInt();/Find and display the Fibonacci number System.out.println(Fibonacci number at index+n+is+fib(n);public static long fib(long n)if(n=0)|(n=1)/Stopping condition return 1;else/Reduction and recursive calls return fib(n-1)+fib(n-2);,递归的缺陷:当调用一般方法时,方法里的局部变量会因为方法执行完毕而结束生命周期。但在调用递归方法时,由于方法本身并未结束就又再次调用自己,所以各个未执行完毕的方法部分及局部变量,便会占用堆栈来存放。等到开始返回时再由堆栈中取出未完成的部分继续执行,此时被占用的堆栈才会一一被释放。当调用递归函数的层数很大时,就必须要有较大的堆栈空间,容易会有内存不足的情形,这也是使用递归函数要注意的地方。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号