浙大 Java語言程序設(shè)計 第四講_第1頁
浙大 Java語言程序設(shè)計 第四講_第2頁
浙大 Java語言程序設(shè)計 第四講_第3頁
浙大 Java語言程序設(shè)計 第四講_第4頁
浙大 Java語言程序設(shè)計 第四講_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1,第 4 章 方法 Method,4.1方法聲明 4.2方法調(diào)用 4.3參數(shù)傳遞 4.4遞歸 課程教學(xué)重點(diǎn)之一,2,概念,方法( Method ) 這是Java的一種命名 和通常意義上的“方法”不同 在其他語言中,叫做“子程序”、“函數(shù)” 如:main( )方法 “方法”的定義 完成特定功能的、相對獨(dú)立的程序段 “方法”的特點(diǎn) 可以在不同的程序段中被多次調(diào)用 可增強(qiáng)程序結(jié)構(gòu)的清晰度,提高編程效率 學(xué)習(xí)重點(diǎn) 方法的聲明和調(diào)用,3,第一個例子,編程實現(xiàn)數(shù)學(xué)計算 Y=(1, 2, 100) +(200,201, 298) +(-1,-2 -99) +(51,52, 199) 如何實現(xiàn)? 使用4 個

2、循環(huán),4,第一種做法,public class Sum4_1 public static void main(String args) int i, 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(The Rusult: +y); ,編寫一個累加的“子程序

3、”,然后調(diào)用4次?,The Result: 43376,5,第二種做法,6,第二個例子,輸入4個整數(shù),求它們中的最大數(shù)。 實現(xiàn)途徑 直接求解4個數(shù)的大小 編寫從兩個數(shù)中找最大數(shù)的方法,再多次調(diào)用這個方法 哪個更好?,7,第一種做法,8,第二種做法,9,什么時候使用“方法”,用戶程序中經(jīng)常重復(fù)的任務(wù) 用戶自己編寫“方法”代碼 常用的任務(wù)由Java提供 數(shù)學(xué)函數(shù) 輸出操作( print、println ) 字符串操作 界面操作 ,10,4.1 方法聲明,方法的規(guī)則 先聲明,后使用 只能在類(Class)中聲明 方法聲明的格式 修飾符 返回值類型 方法名( 參數(shù)表 ) 變量聲明 語句 ,方法頭,方法

4、體 實現(xiàn)具體功能,return 表達(dá)式; /返回方法的結(jié)果, 終止方法的執(zhí)行,11,方法聲明格式的說明,修飾符:static public private protected 返回值類型 返回結(jié)果的數(shù)據(jù)類型,如:int、float、String等 無返回值時用void 方法名: 用戶定義的標(biāo)識符,要符合命名規(guī)則 參數(shù)表: 調(diào)用方法時,傳遞的參數(shù)及其數(shù)據(jù)類型 相鄰的兩個參數(shù)之間用逗號隔開,修飾符 返回值類型 方法名(參數(shù)表) 變量聲明 語句 ,12,【例4-1】計算平方值的方法,static int square(int x) int s; s=x*x; return s; ,類型修飾符,方法名

5、,參數(shù),變量聲明,語句,返回語句,方法頭,13,4.2 方法調(diào)用,方法定義 執(zhí)行方法 調(diào)用方法 調(diào)用格式一 方法表達(dá)式 方法名( 實際參數(shù)表 ) 有返回值的方法,可作為一個表達(dá)式或者一個具體的數(shù)值來使用 如:y = square(20);,14,實際參數(shù) n,形式參數(shù) x,【例4-2】 以方法表達(dá)式方式調(diào)用方法,注意:實參的個數(shù)、順序、類型要和實參一一對應(yīng),15,方法語句,調(diào)用格式二 方法語句 方法名( 實際參數(shù)表 ); 無返回值的方法,以獨(dú)立語句的形式調(diào)用 方法前面的類型修飾符為 void,16,【例4-3】 以方法語句方式調(diào)用方法,方法語句,17,【例4-4】無參方法,有些方法沒有輸入?yún)?shù)

6、,18,第4 章習(xí)題 2,編寫兩個方法,分別求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)。 求最大公約數(shù)可用輾轉(zhuǎn)相除法 歐幾里得算法 (1) a 除以b,得余數(shù)為r (2) 若r0,則 b 為最大公約數(shù) 若r0,則 b 賦值給 a,r 賦值給 b,繼續(xù)以上步驟 (3) 經(jīng)過有限步后,r = 0 最小公倍數(shù)為a*b/最大公約數(shù),a b r 9 6 3 6 3 0 r = a % b,19,第4 章習(xí)題 2 程序一,20,第4 章習(xí)題 2 程序二,輸入: 8 6 最大公約數(shù)是 2 最小公倍數(shù)是 24 輸入: 5 3 無最大公約數(shù) 最小公倍數(shù)是 15 輸入: 675 351 最大公約數(shù)是 27 最小公倍數(shù)是

7、8775,21,第4 章習(xí)題 6,編寫方法,判斷一個三位數(shù)是否是水仙花數(shù) 方法的返回值 true是水仙花數(shù) false不是水仙花數(shù),static boolean isNarcissus(int n) int a, b, c; a=n/100; b=n/10%10; c=n%10; if(n=a*a*a+b*b*b+c*c*c) return true; else return false; ,22,第4 章習(xí)題 6 程序,23,4.3 參數(shù)傳遞,參數(shù)傳遞規(guī)則 調(diào)用帶參數(shù)的方法時,必須提供實參 實參 形參,稱為參數(shù)傳遞 被調(diào)用的 方法用實參執(zhí)行方法體 實參可以是常量、變量、表達(dá)式 所有類型的參數(shù)

8、傳遞都是“值傳遞” 調(diào)用時把實參的值傳遞給形參 問題 如果形參變了,實參會變嗎?,24,【例4-5】交換兩個變量的值,運(yùn)行結(jié)果 調(diào)用前:u=23 v=10,交換前:x=23 y=10 交換后:x=10 y=23 調(diào)用后:u=23 v=10,25,【例4-5】值傳遞的例子,運(yùn)行的結(jié)果 調(diào)用前:u=23 v=10 交換前:x=23 y=10 交換后:x=10 y=23 調(diào)用后:u=23 v=10 說明 參數(shù)傳遞: u x ;v y 調(diào)用前后:u、v 的值沒有變 交換前后:x、y的值改變了,26,4.4 遞歸,用自身的結(jié)構(gòu)來描述自身 典型例子階乘運(yùn)算 遞歸就是自己調(diào)用自己,27,【例4-6】采用遞歸

9、算法求n!,求n! 的算法 n! = n(n-1)! (n-1)! = (n-1)(n-2)! (n-2)! = (n-2)(n-3)! 2! = 21! 1! = 1,遞歸定義 fac(n) = n! fac(n) = n* fac(n-1) fac(n)=1 當(dāng)n=1時,static long fac(int n) if(n=1) return 1; else return n*fac(n-1); ,28,【例4-6】程序,29,遞歸實現(xiàn)過程遞推和回推,fac,fac(5)=5 fac(4),fac,fac,fac,fac,fac,fac,fac (1),fac(4)=4 fac(3),f

10、ac(3)=3 fac(2),fac(2)=2 fac(1),30,非遞歸算法求n!,static long fac(int n) long f=1; for (int i=1;i=n;i+) f=f*i; return f; ,使用循環(huán)結(jié)構(gòu)計算階乘,static long fac(int n) if(n=1) return 1; else return n*fac(n-1); ,與遞歸算法比較,31,遞歸程序設(shè)計的規(guī)范,遞歸的兩個要素 遞歸公式 找出前后項之間的關(guān)系 遞歸出口 遞歸終止條件 第一項的值,32,遞歸程序設(shè)計例子一,例:遞歸計算 s =1+2+3+4+100 遞歸公式 s(n)

11、= s(n-1)+n 遞歸出口 s(0)=0,static int s(int n) if(n=0) return 0; else return s(n-1)+n; ,return (n=0)? 0: s(n-1)+n;,33,遞歸程序設(shè)計例子二,例:求 Fibonacci 數(shù)列中的前20項 遞歸公式 f(n) = f(n-1)+f(n-2) 遞歸出口 f(1)=1 ,f(2)=1,static int f(int n) if(n=1|n=2) return 1; else return f(n-1)+f(n-2); ,34,【例4-7】漢諾塔(Hanoi)問題,據(jù)古印度神話,在貝拿勒斯的圣廟

12、里安放著一塊銅板,板上有3根寶石針。梵天(印度教的主神)在創(chuàng)造世界的時候,在其中的一根針上擺放了由小到大共64片中間有空的金片。無論白天和黑夜,都有一位僧侶負(fù)責(zé)移動這些金片。移動金片的規(guī)則是:一次只能將一個金片移動到另一根針上,并且在任何時候以及任意一根針上,小片只能在大片的上面。當(dāng)64個金片全部由最初的那根針上移動到另一根針上時,這世界就在一聲霹靂中消失。,35,【例4-7】漢諾塔(Hanoi)問題,將64 個金片從桿A搬到桿B 一次只能搬一個金片 金片只能插在A、B、C三個桿中 大片不能壓在小片上,A B C,36,算法,hanio(n個金片,AB) / C為過渡 hanio(n-1個金片

13、,AC) / B為過渡 把n號金片AB hanio(n-1個金片,CB) / A為過渡 ,A (n個金片) B C,if (n = 1) 直接把金片AB else ,37,方法,/* 搬動n個金片,從a到b,c為中間過渡 */ static void hanio(int n, char a, char b, char c) 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個金片,AB) / C為過渡 if (

14、n = 1) 直接把金片AB else hanio(n-1個金片, AC) 把n號金片AB hanio(n-1個金片, CB) ,38,【例4-7】漢諾塔(Hanoi)問題,39,【例4-7】漢諾塔(Hanoi)問題 P.53,40,【例4-7】漢諾塔(Hanoi)問題,金片為3個,需7步完成 金片為64個,需264-1步完成 若每秒1步,需58萬億年 若計算機(jī)每秒運(yùn)算100萬次,需5800萬年,運(yùn)行結(jié)果: The steps for 3 disk are: A-B A-C B-C A-B C-A C-B A-B,41,【例】十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),設(shè)計方法,實現(xiàn)十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制 除2

15、 取余法 如:35 的二進(jìn)制值為 100011,n,n%2 t,n/2n,n=0時停止 即n0時重復(fù),字符串 s,s 初值為 s = t + s,static String dectobin(int n) int t; /保存某位二進(jìn)制 String s=; /保存二進(jìn)制數(shù) do t=n%2; /獲得除2后的余數(shù) s=t+s; /拼接 n=n/2; /獲得除2后的商 while(n0); return s; ,42,【例】十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),43,【例】十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),考慮十進(jìn)制整數(shù)有負(fù)數(shù)的情況 如:-35 的二進(jìn)制值為 -100011,static String dectob

16、in(int n) int t; /保存某位二進(jìn)制 String s=; /保存二進(jìn)制數(shù) do t=n%2; /獲得除2后的余數(shù) s=t+s; /拼接 n=n/2; /獲得除2后的商 while(n0); return s; ,44,import java.util.*; public class T1 static String dTob(int n) String s; if(n0) s=-+dTob(-n); else if(n2) s=+(char)(n+(int)(0); else s=dTob(n/2)+(char)(n%2+(int)0); return s; ,【例】十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),遞歸方法,45,Review: about Method,Method (方法) 相當(dāng)于函數(shù)或子程序

溫馨提示

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

最新文檔

評論

0/150

提交評論