




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章方法—Method4.1 方法声明4.2 方法调用4.3 参数传递4.4 递归课程教学重点之一1第4章方法—Method4.1 方法声明11概念方法(Method)这是Java的一种命名和通常意义上的“方法”不同在其他语言中,叫做“子程序”、“函数”如:main()方法“方法”的定义完成特定功能的、相对独立的程序段“方法”的特点可以在不同的程序段中被多次调用可增强程序结构的清晰度,提高编程效率学习重点方法的声明和调用2概念方法(Method)22第一个例子编程实现数学计算Y=∑(1,2,…100)+∑(200,201,…298)+∑(-1,-2…-99)+∑(51,52,…199)如何实现?使用4个循环3第一个例子编程实现数学计算33第一种做法publicclassSum4_1{ publicstaticvoidmain(String[]args){ inti,y=0; for(i=1;i<=100;i++)//∑(1,2,…100) y=y+i; for(i=200;i<=298;i++)//+∑(200,201,…298) y=y+i; for(i=-99;i<=-1;i++)//+∑(-1,-3,…-99) y=y+i; for(i=51;i<=199;i++)//+∑(51,52,…199) y=y+i; System.out.println("TheRusult:"+y); }}编写一个累加的“子程序”,然后调用4次?TheResult:433764第一种做法publicclassSum4_1{编写一个4第二种做法5第二种做法55第二个例子输入4个整数,求它们中的最大数。实现途径直接求解4个数的大小编写从两个数中找最大数的方法,再多次调用这个方法
哪个更好?
6第二个例子输入4个整数,求它们中的最大数。66第一种做法7第一种做法77第二种做法8第二种做法88什么时候使用“方法”用户程序中经常重复的任务用户自己编写“方法”代码常用的任务——由Java提供数学函数输出操作(print、println)字符串操作界面操作……9什么时候使用“方法”用户程序中经常重复的任务994.1 方法声明方法的规则先声明,后使用只能在类(Class)中声明方法声明的格式 [修饰符]返回值类型方法名([参数表])
{ 变量声明 语句 }方法头方法体实现具体功能
return表达式;//返回方法的结果, 终止方法的执行104.1 方法声明方法的规则方法头方法体return表达式10方法声明格式的说明修饰符:staticpublicprivateprotected……返回值类型返回结果的数据类型,如:int、float、String等无返回值时用void方法名:用户定义的标识符,要符合命名规则参数表:调用方法时,传递的参数及其数据类型相邻的两个参数之间用逗号隔开[修饰符]返回值类型方法名([参数表]){变量声明语句}11方法声明格式的说明修饰符:staticpublic11【例4-1】计算平方值的方法staticintsquare(intx){ints;s=x*x;returns;}类型修饰符方法名参数方法体变量声明语句返回语句方法头返回值类型12【例4-1】计算平方值的方法staticintsquar124.2 方法调用方法定义执行方法调用方法调用格式一方法表达式 方法名([实际参数表])有返回值的方法,可作为一个表达式或者一个具体的数值来使用如:y=square(20);134.2 方法调用方法定义执行方法调用方法1313实际参数n形式参数x参数传递【例4-2】以方法表达式方式调用方法注意:实参的个数、顺序、类型要和实参一一对应14实际参数n形式参数x参数传递【例4-2】以方法表达式方14方法语句调用格式二方法语句 方法名([实际参数表]);无返回值的方法,以独立语句的形式调用方法前面的类型修饰符为void
15方法语句调用格式二1515【例4-3】以方法语句方式调用方法方法语句16【例4-3】以方法语句方式调用方法方法语句1616【例4-4】无参方法有些方法没有输入参数17【例4-4】无参方法有些方法没有输入参数1717第4章习题2编写两个方法,分别求两个整数的最大公约数和最小公倍数。求最大公约数可用辗转相除法欧几里得算法(1)a除以b,得余数为r(2)若r=0,则b为最大公约数若r≠0,则b赋值给a,r赋值给b,继续以上步骤(3)经过有限步后,r=0最小公倍数为a*b/最大公约数abr963630r=a%b18第4章习题2编写两个方法,分别求两个整数的最大公约数和最18第4章习题2程序一19第4章习题2程序一1919第4章习题2程序二输入:86最大公约数是2最小公倍数是24输入:53无最大公约数最小公倍数是15输入:675351最大公约数是27最小公倍数是877520第4章习题2程序二输入:862020第4章习题6编写方法,判断一个三位数是否是水仙花数方法的返回值true 是水仙花数false 不是水仙花数staticbooleanisNarcissus(intn){ inta,b,c; a=n/100; b=n/10%10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) returntrue; else returnfalse;}21第4章习题6编写方法,判断一个三位数是否是水仙花数sta21第4章习题6程序22第4章习题6程序22224.3参数传递参数传递规则调用带参数的方法时,必须提供实参实参形参,称为参数传递
被调用的方法用实参执行方法体
实参可以是常量、变量、表达式所有类型的参数传递都是“值传递”调用时把实参的值传递给形参问题如果形参变了,实参会变吗?234.3参数传递参数传递规则2323【例4-5】交换两个变量的值运行结果调用前:u=23v=10交换前:x=23y=10交换后:x=10y=23调用后:u=23v=1024【例4-5】交换两个变量的值运行结果交换前:x=23y=24【例4-5】值传递的例子运行的结果调用前:u=23v=10交换前:x=23y=10交换后:x=10y=23调用后:u=23v=10说明参数传递:ux;vy调用前后:u、v的值没有变交换前后:x、y的值改变了25【例4-5】值传递的例子运行的结果25254.4递归用自身的结构来描述自身典型例子——阶乘运算递归就是自己调用自己264.4递归用自身的结构来描述自身2626【例4-6】采用递归算法求n!求n!的算法n!=n×(n-1)!(n-1)!=(n-1)×(n-2)!(n-2)!=(n-2)×(n-3)!……2!=2×1!1!=1递归定义fac(n)=n!
fac(n)=n*fac(n-1)fac(n)=1当n=1时staticlongfac(intn){ if(n==1) return1; else returnn*fac(n-1);}27【例4-6】采用递归算法求n!求n!的算法递归定义fac27【例4-6】程序28【例4-6】程序2828递归实现过程——递推和回推facfac(5)=5×fac(4)facfacfacfacfacfacfac(1)fac(4)=4×fac(3)fac(3)=3×fac(2)fac(2)=2×fac(1)29递归实现过程——递推和回推facfac(5)=5×fac(29非递归算法求n!staticlongfac(intn){ longf=1; for(inti=1;i<=n;i++) f=f*i; returnf;}使用循环结构计算阶乘staticlongfac(intn){ if(n==1) return1; else returnn*fac(n-1);}与递归算法比较30非递归算法求n!staticlongfac(intn)30递归程序设计的规范递归的两个要素递归公式找出前后项之间的关系递归出口——递归终止条件第一项的值31递归程序设计的规范递归的两个要素3131递归程序设计例子一例:递归计算s=1+2+3+4+…+100递归公式
s(n)=s(n-1)+n递归出口
s(0)=0staticints(intn){if(n==0)return0;elsereturns(n-1)+n; }return(n==0)?0:s(n-1)+n;32递归程序设计例子一例:递归计算s=1+2+3+4+…+132递归程序设计例子二例:求Fibonacci数列中的前20项递归公式
f(n)=f(n-1)+f(n-2)递归出口
f(1)=1,f(2)=1staticintf(intn){ if(n==1||n==2) return1; else returnf(n-1)+f(n-2);}33递归程序设计例子二例:求Fibonacci数列中的前2033【例4-7】汉诺塔(Hanoi)问题据古印度神话,在贝拿勒斯的圣庙里安放着一块铜板,板上有3根宝石针。梵天(印度教的主神)在创造世界的时候,在其中的一根针上摆放了由小到大共64片中间有空的金片。无论白天和黑夜,都有一位僧侣负责移动这些金片。移动金片的规则是:一次只能将一个金片移动到另一根针上,并且在任何时候以及任意一根针上,小片只能在大片的上面。当64个金片全部由最初的那根针上移动到另一根针上时,这世界就在一声霹雳中消失。34【例4-7】汉诺塔(Hanoi)问题据古印度神话,在贝拿勒斯34【例4-7】汉诺塔(Hanoi)问题将64个金片从杆A搬到杆B一次只能搬一个金片金片只能插在A、B、C三个杆中大片不能压在小片上A B C35【例4-7】汉诺塔(Hanoi)问题将64个金片从杆A搬到35算法hanio(n个金片,A→B)//C为过渡{
hanio(n-1个金片,A→C)//B为过渡
把n号金片A→B hanio(n-1个金片,C→B)//A为过渡 }}A(n个金片) B Cn-1n-1if(n==1)直接把金片A→Belse{n-136算法hanio(n个金片,A→B)//C为过渡36方法
/*搬动n个金片,从a到b,c为中间过渡*/staticvoidhanio(intn,chara,charb,charc){if(n==1)System.out.println(a+"-->"+b);else{
hanio(n-1,a,c,b);System.out.println(a+"-->"+b);
hanio(n-1,c,b,a);}}hanio(n个金片,A→B)//C为过渡{if(n==1)直接把金片A→Belse{hanio(n-1个金片,A→C) 把n号金片A→B hanio(n-1个金片,C→B) }}37方法/*搬动n个金片,从a到b,c为中间过渡*/ha37【例4-7】汉诺塔(Hanoi)问题38【例4-7】汉诺塔(Hanoi)问题3838【例4-7】汉诺塔(Hanoi)问题P.5339【例4-7】汉诺塔(Hanoi)问题P.533939【例4-7】汉诺塔(Hanoi)问题金片为3个,需7步完成金片为64个,需264-1步完成若每秒1步,需58万亿年若计算机每秒运算100万次,需5800万年运行结果:Thestepsfor3diskare:A-->BA-->CB-->CA-->BC-->AC-->BA-->B40【例4-7】汉诺塔(Hanoi)问题金片为3个,需7步完成运40【例】十进制整数转换成二进制数设计方法,实现十进制整数转换成二进制除2取余法如:35的二进制值为100011235217……128……124……022……021……020……1nn%2→tn/2→nn=0时停止即n>0时重复字符串ss初值为""s=t+sstaticStringdectobin(intn){intt;//保存某位二进制Strings="";//保存二进制数do{t=n%2;//获得除2后的余数s=t+s;//拼接n=n/2;//获得除2后的商}while(n>0);returns;}41【例】十进制整数转换成二进制数设计方法,实现十进制整数转换成41【例】十进制整数转换成二进制数42【例】十进制整数转换成二进制数4242【例】十进制整数转换成二进制数考虑十进制整数有负数的情况如:-35的二进制值为-100011staticStringdectobin(intn){intt;//保存某位二进制Strings="";//保存二进制数
do{t=n%2;//获得除2后的余数s=t+s;//拼接n=n/2;//获得除2后的商}while(n>0);returns;}43【例】十进制整数转换成二进制数考虑十进制整数有负数的情况st43importjava.util.*;publicclassT1{staticStringdTob(intn){Strings;if(n<0)s="-"+dTob(-n);elseif(n<2)s=""+(char)(n+(int)('0'));elses=dTob(n/2)+(char)(n%2+(int)'0');returns;}【例】十进制整数转换成二进制数递归方法44importjava.util.*;【例】十进制整数转换成44Review:aboutMethodMethod(方法)相当于函数或子程序编写Method(方法)方法类型(返回值),方法名,形式参数在class(类)中编写不能嵌套调用Method(方法)格式方法表达式:方法有返回值方法语句:方法没有返回值(void)在Main方法中调用也可在Method(方法)中调用——递归45Review:aboutMethodMethod(方法45Review:aboutMethod要求能解读“方法”的程序代码能编写简单的“方法”常用的方法(自定义)水仙花数Fibonacci数列计算阶乘求阶乘之和计算多项式——例如第4章习题3计算公约数、公倍数判断素数46Review:aboutMethod要求4646第4章方法—Method4.1 方法声明4.2 方法调用4.3 参数传递4.4 递归课程教学重点之一47第4章方法—Method4.1 方法声明147概念方法(Method)这是Java的一种命名和通常意义上的“方法”不同在其他语言中,叫做“子程序”、“函数”如:main()方法“方法”的定义完成特定功能的、相对独立的程序段“方法”的特点可以在不同的程序段中被多次调用可增强程序结构的清晰度,提高编程效率学习重点方法的声明和调用48概念方法(Method)248第一个例子编程实现数学计算Y=∑(1,2,…100)+∑(200,201,…298)+∑(-1,-2…-99)+∑(51,52,…199)如何实现?使用4个循环49第一个例子编程实现数学计算349第一种做法publicclassSum4_1{ publicstaticvoidmain(String[]args){ inti,y=0; for(i=1;i<=100;i++)//∑(1,2,…100) y=y+i; for(i=200;i<=298;i++)//+∑(200,201,…298) y=y+i; for(i=-99;i<=-1;i++)//+∑(-1,-3,…-99) y=y+i; for(i=51;i<=199;i++)//+∑(51,52,…199) y=y+i; System.out.println("TheRusult:"+y); }}编写一个累加的“子程序”,然后调用4次?TheResult:4337650第一种做法publicclassSum4_1{编写一个50第二种做法51第二种做法551第二个例子输入4个整数,求它们中的最大数。实现途径直接求解4个数的大小编写从两个数中找最大数的方法,再多次调用这个方法
哪个更好?
52第二个例子输入4个整数,求它们中的最大数。652第一种做法53第一种做法753第二种做法54第二种做法854什么时候使用“方法”用户程序中经常重复的任务用户自己编写“方法”代码常用的任务——由Java提供数学函数输出操作(print、println)字符串操作界面操作……55什么时候使用“方法”用户程序中经常重复的任务9554.1 方法声明方法的规则先声明,后使用只能在类(Class)中声明方法声明的格式 [修饰符]返回值类型方法名([参数表])
{ 变量声明 语句 }方法头方法体实现具体功能
return表达式;//返回方法的结果, 终止方法的执行564.1 方法声明方法的规则方法头方法体return表达式56方法声明格式的说明修饰符:staticpublicprivateprotected……返回值类型返回结果的数据类型,如:int、float、String等无返回值时用void方法名:用户定义的标识符,要符合命名规则参数表:调用方法时,传递的参数及其数据类型相邻的两个参数之间用逗号隔开[修饰符]返回值类型方法名([参数表]){变量声明语句}57方法声明格式的说明修饰符:staticpublic57【例4-1】计算平方值的方法staticintsquare(intx){ints;s=x*x;returns;}类型修饰符方法名参数方法体变量声明语句返回语句方法头返回值类型58【例4-1】计算平方值的方法staticintsquar584.2 方法调用方法定义执行方法调用方法调用格式一方法表达式 方法名([实际参数表])有返回值的方法,可作为一个表达式或者一个具体的数值来使用如:y=square(20);594.2 方法调用方法定义执行方法调用方法1359实际参数n形式参数x参数传递【例4-2】以方法表达式方式调用方法注意:实参的个数、顺序、类型要和实参一一对应60实际参数n形式参数x参数传递【例4-2】以方法表达式方60方法语句调用格式二方法语句 方法名([实际参数表]);无返回值的方法,以独立语句的形式调用方法前面的类型修饰符为void
61方法语句调用格式二1561【例4-3】以方法语句方式调用方法方法语句62【例4-3】以方法语句方式调用方法方法语句1662【例4-4】无参方法有些方法没有输入参数63【例4-4】无参方法有些方法没有输入参数1763第4章习题2编写两个方法,分别求两个整数的最大公约数和最小公倍数。求最大公约数可用辗转相除法欧几里得算法(1)a除以b,得余数为r(2)若r=0,则b为最大公约数若r≠0,则b赋值给a,r赋值给b,继续以上步骤(3)经过有限步后,r=0最小公倍数为a*b/最大公约数abr963630r=a%b64第4章习题2编写两个方法,分别求两个整数的最大公约数和最64第4章习题2程序一65第4章习题2程序一1965第4章习题2程序二输入:86最大公约数是2最小公倍数是24输入:53无最大公约数最小公倍数是15输入:675351最大公约数是27最小公倍数是877566第4章习题2程序二输入:862066第4章习题6编写方法,判断一个三位数是否是水仙花数方法的返回值true 是水仙花数false 不是水仙花数staticbooleanisNarcissus(intn){ inta,b,c; a=n/100; b=n/10%10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) returntrue; else returnfalse;}67第4章习题6编写方法,判断一个三位数是否是水仙花数sta67第4章习题6程序68第4章习题6程序22684.3参数传递参数传递规则调用带参数的方法时,必须提供实参实参形参,称为参数传递
被调用的方法用实参执行方法体
实参可以是常量、变量、表达式所有类型的参数传递都是“值传递”调用时把实参的值传递给形参问题如果形参变了,实参会变吗?694.3参数传递参数传递规则2369【例4-5】交换两个变量的值运行结果调用前:u=23v=10交换前:x=23y=10交换后:x=10y=23调用后:u=23v=1070【例4-5】交换两个变量的值运行结果交换前:x=23y=70【例4-5】值传递的例子运行的结果调用前:u=23v=10交换前:x=23y=10交换后:x=10y=23调用后:u=23v=10说明参数传递:ux;vy调用前后:u、v的值没有变交换前后:x、y的值改变了71【例4-5】值传递的例子运行的结果25714.4递归用自身的结构来描述自身典型例子——阶乘运算递归就是自己调用自己724.4递归用自身的结构来描述自身2672【例4-6】采用递归算法求n!求n!的算法n!=n×(n-1)!(n-1)!=(n-1)×(n-2)!(n-2)!=(n-2)×(n-3)!……2!=2×1!1!=1递归定义fac(n)=n!
fac(n)=n*fac(n-1)fac(n)=1当n=1时staticlongfac(intn){ if(n==1) return1; else returnn*fac(n-1);}73【例4-6】采用递归算法求n!求n!的算法递归定义fac73【例4-6】程序74【例4-6】程序2874递归实现过程——递推和回推facfac(5)=5×fac(4)facfacfacfacfacfacfac(1)fac(4)=4×fac(3)fac(3)=3×fac(2)fac(2)=2×fac(1)75递归实现过程——递推和回推facfac(5)=5×fac(75非递归算法求n!staticlongfac(intn){ longf=1; for(inti=1;i<=n;i++) f=f*i; returnf;}使用循环结构计算阶乘staticlongfac(intn){ if(n==1) return1; else returnn*fac(n-1);}与递归算法比较76非递归算法求n!staticlongfac(intn)76递归程序设计的规范递归的两个要素递归公式找出前后项之间的关系递归出口——递归终止条件第一项的值77递归程序设计的规范递归的两个要素3177递归程序设计例子一例:递归计算s=1+2+3+4+…+100递归公式
s(n)=s(n-1)+n递归出口
s(0)=0staticints(intn){if(n==0)return0;elsereturns(n-1)+n; }return(n==0)?0:s(n-1)+n;78递归程序设计例子一例:递归计算s=1+2+3+4+…+178递归程序设计例子二例:求Fibonacci数列中的前20项递归公式
f(n)=f(n-1)+f(n-2)递归出口
f(1)=1,f(2)=1staticintf(intn){ if(n==1||n==2) return1; else returnf(n-1)+f(n-2);}79递归程序设计例子二例:求Fibonacci数列中的前2079【例4-7】汉诺塔(Hanoi)问题据古印度神话,在贝拿勒斯的圣庙里安放着一块铜板,板上有3根宝石针。梵天(印度教的主神)在创造世界的时候,在其中的一根针上摆放了由小到大共64片中间有空的金片。无论白天和黑夜,都有一位僧侣负责移动这些金片。移动金片的规则是:一次只能将一个金片移动到另一根针上,并且在任何时候以及任意一根针上,小片只能在大片的上面。当64个金片全部由最初的那根针上移动到另一根针上时,这世界就在一声霹雳中消失。80【例4-7】汉诺塔(Hanoi)问题据古印度神话,在贝拿勒斯80【例4-7】汉诺塔(Hanoi)问题将64个金片从杆A搬到杆B一次只能搬一个金片金片只能插在A、B、C三个杆中大片不能压在小片上A B C81【例4-7】汉诺塔(Hanoi)问题将64个金片从杆A搬到81算法hanio(n个金片,A→B)//C为过渡{
hanio(n-1个金片,A→C)//B为过渡
把n号金片A→B hanio(n-1个金片,C→B)//A为过渡 }}A(n个金片) B Cn-1n-1if(n==1)直接把金片A→Belse{n-182算法hanio(n个金片,A→B)//C为过渡82方法
/*搬动n个金片,从a到b,c为中间过渡*/staticvoidhanio(intn,chara,charb,charc){if(n==1)System.out.println(a+"-->"+b);else{
hanio(n-1,a,c,b);System.out.println(a+"-->"+b);
hanio(n-1,c,b,a);}}hanio(n个金片,A→B)//C为过渡{if(n==1)直接把金片A→Belse{hanio(n-1个金片,A→C) 把n号金片A→B hanio(n-1个金片,C→B) }}83方法/*搬动n个金片,从a到b,c为中间过渡*/ha83【例4-7】汉诺塔(Hanoi)问题84【例4-7】汉诺塔(Hanoi)问题3884【例4-7】汉诺塔(Hanoi)问题P.5385【例4-7】汉诺塔(Hanoi)问题P.533985【例4-7】汉诺塔(Hanoi)问题金片为3个,需7步完成金片为64个,需264-1步完成若每秒1步,需58万亿年若计算机每秒运算100万次,需5800万年运行结果:Thestepsfor3diskare:A-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公室健康管理的新选择基于AI的心血管健康维护策略探讨
- 2025至2030中国食用猪油市场消费趋势与投资机会风险研究报告
- 财务未来一年的工作计划(3篇)
- 客服前台工作总结(12篇)
- 以综合护理能力为核心的人才培养策略研究
- 区块链技术未来媒体传播的新引擎
- 对肿瘤治疗效果评价
- 经络治疗仪原理
- 健康管理中患者隐私的保护与医技协同研究
- 2025教学年度工作总结(20篇)
- ISOTS 22163专题培训考试
- 六年级下册数学课件-第4单元 比例 整理和复习 人教版(共21张PPT)
- JJF(鲁) 142-2022 称重式雨量计校准规范
- Adobe-Illustrator-(Ai)基础教程
- 程序的运行结果PPT学习教案
- 圆柱钢模计算书
- 合成宝石特征x
- 查摆问题及整改措施
- 年度研发费用专项审计报告模板(共22页)
- 隧道工程隧道支护结构设计实用教案
- 得力打卡机破解Excel工作表保护密码4页
评论
0/150
提交评论