资源描述
,按一下以編輯母片標題樣式,*,按一下以編輯母片,第二層,第三層,第四層,第五層,第5章 程序與函數的類別方法,5-1 程序與函數的基礎,5-2 Java的類別方法,5-3 Java的類別變數和變數範圍,5-4 遞迴程式設計,第5章 程序與函數的類別方法5-1 程序與函數的基礎,5-1 程序與函數的基礎-說明,程式是一個獨立的程式區塊,在執行程式時,將流程控制轉移至程序,稱為程序呼叫(,Subroutines Call,)。,程序如同一個黑盒子(,Black Box,),只要告訴我們如何使用黑盒子的使用介面(,Interface,)即可,如下圖所示:,5-1 程序與函數的基礎-說明程式是一個獨立的程式區塊,在執,5-1 程序與函數的基礎-語法與語意,程序的語法(Syntactic)是說明程序需要傳入何種資料型態的參數(Parameters)和傳回值,語意(Semantic)是描述程序可以作什麼事?,換句話說,在撰寫程序時,我們需要了解程序的語法規則;呼叫程序時需要了解程序的語意規則,如此才能夠正確的呼叫程序。,5-1 程序與函數的基礎-語法與語意程序的語法(Syn,5-2 Java的類別方法,5-2-1 建立Java的類別方法,5-2-2 類別方法的參數傳遞,5-2-3 類別方法的傳回值,5-2-4 傳值或傳址參數,5-2 Java的類別方法5-2-1 建立Java的類別方法,5-2 Java的類別方法,Java,的程序與函數稱為方法(,Methods,),分為:,類別的類別方法(,Class Methods,),物件的實例方法(,Instance Methods,),在本章說明的是類別方法,相當於是其他程式語言的程序和函數。實例方法的說明請參閱第,10,章。,5-2 Java的類別方法Java的程序與函數稱為方法(,5-2-1 建立Java的類別方法-語法,Java,語言的類別方法是由方法名稱和程式區塊組成,其語法格式如下所示:,存取敘述,static,傳回值型態 方法名稱,(,參數列,),程式敘述,;,5-2-1 建立Java的類別方法-語法Java語言的類別方,5-2-1 建立Java的類別方法-存取敘述修飾子,存取敘述(,Access Specifier,)是一種修飾子,可以是,public,和,private,,其說明如下所示:,public,:,方法可以在程式任何地方進行呼叫,甚至是其他類別。,private,:,方法只能在同一個類別內進行呼叫。,5-2-1 建立Java的類別方法-存取敘述修飾子存取敘述,5-2-1 建立Java的類別方法-範例,例如:沒有傳回值和參數列的,printTriangle(),方法,如下所示:,private static void printTriangle(),int i,j;,for(i=5;i=1;i-),for(j=1;j=i;j+),System.out.print(*);,System.out.print(n);,5-2-1 建立Java的類別方法-範例例如:沒有傳回值和參,5-2-1 建立Java的類別方法-呼叫,呼叫,Java,方法是使用類別名稱或方法名稱,其語法格式如下所示:,方法名稱,(,參數列,);,類別名稱,.,方法名稱,(,參數列,);,因為,printTriangle(),方法沒有傳回值和參數列,所以呼叫方法只需使用方法名稱,加上空括號即可,如下所示:,printTriangle();,如果在其他類別呼叫此類別方法,例如:,public,修飾子的,sumOne2Ten(),方法,其呼叫方式,如下所示:,Ch5_2_1.sumOne2Ten();,5-2-1 建立Java的類別方法-呼叫呼叫Java方法是使,5-2-2 類別方法的參數傳遞-說明,Java方法的參數列是資訊傳遞的機制,可以從外面將資訊送入方法的黑盒子,參數列是方法的使用介面。,當方法擁有參數列,在呼叫方法時,即可傳入不同參數來產生不同的執行結果。,5-2-2 類別方法的參數傳遞-說明Java方法的參數列是資,5-2-2 類別方法的參數傳遞-範例,例如:擁有參數的,sumN2N(),方法,如下所示:,static void sumN2N(int begin,int end),int i,sum=0;,for(i=begin;i 0,,使用,n!,定義的第2條計算階層函數4!的值,如下所示:,4!=4*3*2*1=24,因為階層函數本身擁有遞迴特性。可以將4!的計算分解成子問題,如下所示:,4!=4*(4-1)!=4*3!,現在3!的計算成為一個新的子問題,必須先計算出3!值後,才能處理上述的乘法。,5-4-1 遞迴的階層函數-過程1例如:計算4!的值,從上述,5-4-1 遞迴的階層函數-過程2,同理將子問題3!繼續分解,如下所示:,3!=3*(3-1)!=3*2!,2!=2*(2-1)!=2*1!,1!=1*(1-1)!=1*0!=1*1=1,最後在知道1!的值後,接著就可以計算出2!4!的值,如下所示:,2!=2*(2-1)!=2*1!=2,3!=3(3-1)!=3*2!=3*2=6,4!=4*(4-1)!=4*3!=24,5-4-1 遞迴的階層函數-過程2同理將子問題3!繼續分解,,5-4-1 遞迴的階層函數-方法,/,遞迴方法,:,計算階層函數的值,static int factorial(int n),if(n=1)/,終止條件,return 1;,else,return n*factorial(n-1);,5-4-1 遞迴的階層函數-方法 /遞迴方法:計,5-4-2 河內塔問題-說明,河內塔(,Tower of Hanoi),問題是程式語言在說明遞迴觀念時,不可錯過的實例,這是一個流傳在,Brahma,廟內的遊戲,廟內的僧侶相信完成這個遊戲是一件不可能的任務。河內塔問題共有三根木樁,如下圖所示:,5-4-2 河內塔問題-說明河內塔(Tower of H,5-4-2 河內塔問題-規則,共有,n,個盤子放置在第一根木樁,盤子的尺寸由上而下依序遞增。河內塔問題是將所有的盤子從木樁1搬移到木樁3,在搬動的過程中有三項規則,如下所示:,每次只能移動一個盤子,而且只能從最上面的盤子搬動。,任何盤子可以搬到任何一根木樁。,必須維持盤子的大小是由上而下依序遞增。,5-4-2 河內塔問題-規則共有n個盤子放置在第一根木樁,盤,5-4-2 河內塔問題-步驟,歸納出三個步驟,如下所示:,Step 1:,將最上面,n-1,個盤子從木樁1搬移到木樁2。,Step 2:,將最後一個盤子從木樁1搬移到木樁3。,Step 3:,將木樁2的,n-1,個盤子搬移到木樁3。,5-4-2 河內塔問題-步驟歸納出三個步驟,如下所示:,5-4-2 河內塔問題-方法,static void towerofHanoi(int d,int p1,int p2,int p3),if(d=1)/,終止條件,System.out.println(,盤子從,+p1+,移到,+p3);,else,/,第一步驟,towerofHanoi(d-1,p1,p3,p2);,System.out.println(,盤子從,+p1+,移到,+p3);,/,第三步驟,towerofHanoi(d-1,p2,p1,p3);,5-4-2 河內塔問題-方法static void towe,
展开阅读全文