文本第五講方法_第1頁
文本第五講方法_第2頁
文本第五講方法_第3頁
文本第五講方法_第4頁
文本第五講方法_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第五講 方法本章要點(diǎn)對(duì)方法的理解方法的聲明方法的調(diào)用參數(shù)的傳遞方法的重載遞歸與迭代方法概述通過前面章節(jié)的程序結(jié)構(gòu)我們可以看到,對(duì)簡單的問題,程序比較簡單,一個(gè)程序是一個(gè)類,在類中包含一個(gè)main()方法。但解決一些比較復(fù)雜的問題時(shí),按照現(xiàn)代模塊化程序設(shè)計(jì)的思想,應(yīng)仔細(xì)分析問題,善于將這些復(fù)雜問題分解成若干個(gè)相對(duì)簡單的問題,即劃分成多個(gè)模塊。這樣,解決一個(gè)復(fù)雜問題就轉(zhuǎn)化為一些簡單的問題。方法概述JAVA中有兩種模塊:方法和類。借助Java API和其他各種類庫中可用的、“預(yù)先打好包”的方法和類,我們可以編寫出新的方法和類。在程序設(shè)計(jì)時(shí),可以將一個(gè)程序中完成特定功能的程序定義成方法(有時(shí)在其他編程

2、語言中稱為函數(shù)或過程)。在需要使用這些功能時(shí),可調(diào)用相應(yīng)的方法,特別是在某些功能多次被使用時(shí),采用方法可大大地提高程序代碼的可重用性。方法概述“方法”的目的:一是“分而治之”;二是軟件的重用;三是避免在程序中重復(fù)代碼。常用的Math類的方法和String類的方法方法的聲明使用打印三個(gè)矩形的實(shí)例說明方法的聲明方法聲明的一般格式為:修飾符1 修飾符2 .返回值類型 函數(shù)名(參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)2,.) 程序代碼 return 返回值 補(bǔ)充:聲明方法時(shí)使用的參數(shù)稱為形式參數(shù)(形參),調(diào)用方法時(shí)使用的參數(shù)稱為實(shí)際參數(shù)(實(shí)參)。方法頭方法體方法的聲明聲明方法應(yīng)注意:在類體的“ ”外定

3、義方法,是語法錯(cuò)誤方法名可以是任何合法的標(biāo)識(shí)符返回值類型可以是任何基本數(shù)據(jù)類型、String和void(表示方法不返回值),方法至多可以返回一個(gè)值,且返回值類型是不可省略的如果指定的返回值類型不是void,則方法中必須包含一條return語句,返回指定類型的值,同樣在返回值類型為void的方法中返回一個(gè)值也是一種語法錯(cuò)誤方法的聲明聲明方法應(yīng)注意(接上頁)方法頭“()”中的形參用逗號(hào)分隔,且用add(int a,b)代替add(int a,int b)是一種錯(cuò)誤方法頭“()”的右端不能放置“;”在方法體中將形式參數(shù)重新聲明是一種語法錯(cuò)誤方法的聲明方法按是否有參數(shù)可分為有參方法和無參方法: 例 定

4、義計(jì)算平方的方法(有參方法) static int square(int x) int s; s=x*x; return (s); 方法的聲明例 求最大值的方法 int max3(int x,int y,int z) int big; if(xy) big=x; else big=y; if(bigmax) max=x; else max=y; return max; 方法的聲明對(duì)象方法是沒有static修飾符修飾的方法,必須生成對(duì)象實(shí)例才能夠使用該方法。如:class Car int speed; /變量定義部分。 float weight,height; /變量定義部分。 void cha

5、ngSpeed(int newSpeed) /對(duì)象方法定義。 speed=newSpeed; float getWeight() /對(duì)象方法定義。 return weight; float getHeight() /對(duì)象方法定義。 return height; 方法的調(diào)用1、類方法調(diào)用 類方法可以直接調(diào)用或通過類名.方法名(實(shí)參)調(diào)用,不需生成對(duì)象。 對(duì)于有返回值的類方法作為表達(dá)式或表達(dá)式的一部分來調(diào)用,其在表達(dá)式中出現(xiàn)的形式為:方法名(實(shí)際參數(shù)表)方法的調(diào)用例 調(diào)用類方法public class SquareC static int square(int x) /類方法 int s; s=x

6、*x; return (s); public static void main(String args) int n = 5; int result; result= square(n);/類方法調(diào)用 System.out.println(result); 方法的調(diào)用對(duì)于沒有返回值的類方法,以獨(dú)立語句的方式調(diào)用方法。例: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

7、=3; area(x, y); /方法語句,直接調(diào)用類方法 方法的調(diào)用例 無參類方法調(diào)用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( ); 方法的調(diào)用2、對(duì)象方法調(diào)用對(duì)于對(duì)象方法,必須先生成對(duì)象實(shí)例,然后用如下形式調(diào)用方法: 對(duì)象名.方法名(實(shí)參)class MyObjectstatic int x=10;static int y=20;void method(int k,int m)int

8、sum;sum=k+m;System.out.println(sum=+sum);public static void main(String args)MyObject obj=new MyObject(); /生成對(duì)象obj.method(x,y); /調(diào)用對(duì)象方法方法的調(diào)用/對(duì)象方法(實(shí)例方法)調(diào)用示例:class Car int speed; /變量定義部分。 float weight=12,height=2; /變量定義部分。 void changSpeed(int newSpeed) /對(duì)象方法定義。 speed=newSpeed; float getWeight() /對(duì)象方法定

9、義。 return weight; float getHeight() /對(duì)象方法定義。 return height; public static void main(String args) Car myCar=new Car( ); myCar.changSpeed(120); System.out.println(車速度為:+myCar.speed); System.out.println(車的重量為:+myCar.getWeight(); System.out.println( 高度為:+myCar.getHeight(); 方法的調(diào)用/對(duì)象方法(實(shí)例方法)調(diào)用示例:注意x,y的值是否

10、變化?文件名如何命名?class Tom void f(int x,double y) x=x+1; y=y+1; System.out.println(參數(shù)x和y的值分別是:”+x+” ,”+y); public class Example public static void main(String args) int x=10; double y=12.58; Tom tom=new Tom(); tom.f(x,y); System.out.println(main方法中x和y的值仍然分別是:“+x+” ,”+y); 參數(shù)的傳遞參數(shù)傳遞要點(diǎn):虛實(shí)結(jié)合“三一致”原則即實(shí)參與虛參個(gè)數(shù)、類型

11、、順序一致。例4-5 參數(shù)傳遞實(shí)例public class Swaping static void swap(int x , int y ) int temp ; temp = x; x = y; y = temp; 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(

12、u= +u+ v= +v); 參數(shù)的傳遞class Lader double above,bottom,height; public void setAbove(double a) above=a; public void setBottom(double b) bottom=b; public void setHeight(double h) height=h; double computeArea() return (above+bottom)*height/2.0; public class Example public static void main(String args) dou

13、ble area=0; Lader laderOne=new Lader(); laderOne.setAbove(10); laderOne.setBottom(40); laderOne.setHeight(2); puteArea(); System.out.println(laderOne的面積是:+area); 方法的嵌套在解決較為復(fù)雜的問題時(shí),用到方法調(diào)用的地方比較多。如果在一個(gè)方法的方法體中又調(diào)用了另外的方法,這就被稱為方法的嵌套調(diào)用,也稱方法的嵌套?!纠?-7】用方法的嵌套求立方體的體積程序分析: main()方法中,調(diào)用vol()方法求立方體的體積,轉(zhuǎn)到vol()方法體中又調(diào)

14、用了area()方法求面積。這種在調(diào)用一個(gè)方法vol()的方法體中又調(diào)用另外的一個(gè)方法area()的做法,就是方法的嵌套方法的嵌套public class Volume public static void main(String args ) int i=5,j=6,k=7,v; v=vol(i,j,k); System.out.println(立方體的體積為:+v); static int vol(int a,int b,int c) /求體積的vol()方法 return(a*area(b,c); static int area(int x,int y) /求面積的area()方法 re

15、turn(x*y); 遞歸方法嵌套中更為特別的是,如果在被調(diào)用一個(gè)方法的方法體中又調(diào)用一個(gè)方法,而這個(gè)方法正是它自身,即:如果在一個(gè)方法的方法體中又調(diào)用它自身的方法嵌套稱為方法的遞歸。遞歸例:采用遞歸算法求n!fac(n)=1 n=1n*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=25; f=fac(k); System.out.printl

16、n(f);遞歸例:Fibonacci數(shù)列是這樣的一列數(shù): 1,1,2,3,5,8,13,21,34,55,第n個(gè)Fibonacci數(shù)的遞歸描述為:public class Fibo public static void main(String args ) for(int i=1;i=20;i+) System.out.print(f(i)+ ); if (i%10= =0)System.out.println(); static int f(int n) if(n= =1|n= =2)return 1; else return(f(n-2)+f(n-1); 遞歸從程序設(shè)計(jì)的角度來說,遞歸調(diào)用

17、必須解決兩個(gè)問題:一是遞歸計(jì)算的公式,二是遞歸結(jié)束的條件。每一個(gè)要使用遞歸的方法解決的問題,都要先考慮好這兩個(gè)方面。 如本例說到的遞歸描述中就包含了這兩個(gè)條件,其中: 遞歸計(jì)算公式:f(n)=f(n-2)+f(n-1) 遞歸結(jié)束條件:f(1)=1,f(2)=1遞歸漢諾塔問題(P204 6.37)問題是印度的一個(gè)古老的傳說。開天辟地的神勃拉瑪在一個(gè)廟里留下了三根金剛石的棒,第一根上面套著64個(gè)圓的金片,最大的一個(gè)在底下,其余一個(gè)比一個(gè)小,依次疊上去,廟里的眾僧不倦地把它們一個(gè)個(gè)地從這根棒搬到另一根棒上,規(guī)定可利用中間的一根棒作為幫助,但每次只能搬一個(gè),而且大的不能放在小的上面。解答結(jié)果請(qǐng)自己運(yùn)行

18、計(jì)算,程序見尾部。面對(duì)龐大的數(shù)字(移動(dòng)圓片的次數(shù))18,446,744,073,709,551,615,看來,眾僧們耗盡畢生精力也不可能完成金片的移動(dòng)。后來,這個(gè)傳說就演變?yōu)闈h諾塔游戲: 1.有三根桿子A,B,C。A桿上有若干圓盤2.每次移動(dòng)一個(gè)圓盤,小的只能疊在大的上面3.把所有圓盤從A桿全部移到C桿上遞歸移動(dòng)n個(gè)圓盤可以看成只移動(dòng)n-1個(gè)圓盤再加上移動(dòng)最后一個(gè)(最大)圓盤的過程:從A移動(dòng)n-1個(gè)圓盤到B,C做臨時(shí)的存放從A移動(dòng)最后一個(gè)圓盤到C從B移動(dòng)n-1個(gè)圓盤到C,A做臨時(shí)的存放柱子A柱子B柱子C遞歸遞歸結(jié)束的條件為:n=1時(shí),從A移動(dòng)最后一個(gè)圓盤到C我們可定義方法hanoi(int n,char a,char b,char c)表示移動(dòng)n個(gè)圓盤從a到c,以b做臨時(shí)的存放moves(c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論