第5章+Java方法.ppt_第1頁
第5章+Java方法.ppt_第2頁
第5章+Java方法.ppt_第3頁
第5章+Java方法.ppt_第4頁
第5章+Java方法.ppt_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五講,Java方法,授課方式:投影演示 教學(xué)目標:讓學(xué)生掌握方法的基本概念 教學(xué)內(nèi)容:1、方法定義的格 2、方法的參數(shù)和值 教學(xué)重點:形參和實參的概念,返回值 教學(xué)難點:形參和實參的運用 課時安排:2課時,第5講 方法,方法的概述 方法定義 方法的參數(shù)與值 方法的調(diào)用 方法的嵌套調(diào)用 方法的遞歸調(diào)用 變量的作用域,方法的概述,方法對執(zhí)行重復(fù)或共享的任務(wù)很有用,可以在代碼中的許多不同位置調(diào)用方法 優(yōu)點: 方法允許將程序分為不連續(xù)的邏輯單元。 便于程序的修改,方法的分類,從方法和過程兩種功能這一角度 有返回值方法 無返回值方法 從主調(diào)方法和被調(diào)方法之間數(shù)據(jù)傳遞的角度 無參方法 有參方法,【實例】

2、 求 n!,創(chuàng)建一個C#程序,并定義一個方法Factor(n),計算n!,輸入n的值,調(diào)用Factor(n)方法計算1!至n!,并在屏幕上輸出。(如下圖n=9時的結(jié)果),請輸入n的值:9 1!=1 2!=2 3!=6 4!=24 5!=120 6!=720 7!=5040 8!=40320 9!=362880,代碼分析與討論,static void Main(string args) Scanner input = new Scanner(System.in); System.out.println(請輸入n的值:); int n=0; long f; n =input.nextInt( );

3、 MyMath mymath = new MyMath(); for (int i = 1; i =n; i+) f = mymath. Factor(i); System.out.println(i+!=“+f); ,Class MyMath public long Factor(int n) long fa = 1; for (int i = n; i = 1; i-) fa *= i; return fa; ,方法定義的格式,無參方法的定義形式 返回類型 方法名() 聲明部分 語句 ,有參方法定義的一般形式 返回類型 方法名(形式參數(shù)表列) 聲明部分 語句 ,【實例】求兩個數(shù)中的大數(shù),P

4、ublic class MyMath public int max(int a, int b) if (a b) return a; else return b; ,static void Main(string args) Scanner input = new Scanner(System.in); int x,y,z; MyMath mymath = new MyMath(); System.out.print(請輸入兩個數(shù)字:); x = input.nextInt(); y = input.nextInt(); z= mymath.max(x,y); System.out.print

5、ln(最大數(shù)字為:“+z); ,方法的參數(shù)與值,形式參數(shù)和實際參數(shù) 返回值 方法的返回值是通過方法體中的return語句獲得的,return語句后面表達式的值為方法的返回值。,【實例】 形參與實參,static void Main(string args) int n=0; Scanner input = new Scanner(); MyMath mymath = new MyMath(); System.out.print(input numbern); n = input.nextInt( ); mymath.s(n); System.out.println(“n=“+n); Conso

6、le.Read(); ,public class MyMath public int s(int n) int i; for(i=n-1;i=1;i-) n=n+i; System.out.println(n=“+n); return n; ,習題,1、編寫一個程序,輸入一個球的半徑(double類型),然后調(diào)用sphereVolum計算并顯示球的體積。計算球的體積的公式是: Volum=4/3*pi*Radius3) 2、編寫方法intergerPower(base,exponect),返回base的exponent次冪值。例如:intergerPower(3,4)=34設(shè)exponent是

7、一個正整數(shù),base也是一個整數(shù)。編寫程序調(diào)用intergerPower方法。,方法的調(diào)用,在程序中是通過對方法的調(diào)用來執(zhí)行方法體的 #語言中,方法調(diào)用的一般形式為: 方法名(實際參數(shù)表) 【提示】在方法調(diào)用中,參數(shù)值的數(shù)量、類型和順序必須與方法頭中的參數(shù)完全對應(yīng)。,參數(shù)傳遞,方法的定義是在類的設(shè)計中進行的,方法的使用是在實際運行中進行的,定義方法的時候使用形式參數(shù)(形參),而調(diào)用方法時候,用實際參數(shù)(實參)取代形式參數(shù),這個過程稱為參數(shù)傳遞。 向方法傳遞參數(shù)有兩個方法,一個是“傳值”,另一個是“傳引用”。,傳值,值傳遞就是實參將值復(fù)制給形參,系統(tǒng)要為形參開設(shè)存儲空間,以接受傳遞的值,此時形參

8、成為一個實在的局部變量 實參和形參脫離關(guān)系,形參在方法中參與運算,在運算中發(fā)生的任何變化都不會影響實參,【實例】 值傳遞,static void Main(string args) int i = 1, j = 2; MyMath mymath = new MyMath( ); mymath.Swap(i, j); System.out.println(i=“ + i + j=“ + j); ,編譯上述代碼,程序?qū)⑤敵觯?i=1,j=2,public class MyMath public void Swap(int x, int y) int temp = x; x = y; y = tem

9、p; ,方法的嵌套調(diào)用 方法的遞歸調(diào)用 變量的作用域,方法的嵌套調(diào)用,#語言允許在一個方法的定義中出現(xiàn)對另一個方法的調(diào)用。這樣就出現(xiàn)了方法的嵌套調(diào)用。,【實例】方法的嵌套調(diào)用,題目:計算s=22!+32! 解題思路: 本題可編寫兩個方法,一個是用來計算平方值的方法f1,另一個是用來計算階乘值的方法f2。主方法先調(diào)f1計算出平方值,再在f1中以平方值為實參,調(diào)用 f2計算其階乘值,然后返回f1,再返回主方法,在循環(huán)程序中計算累加和。,代碼分析與討論,public class MyMath public long f1(int p) int k; long r; k=p*p; r=f2(k); r

10、eturn r; public long f2(int q) long c=1; int i; for(i=1;i=q;i+) c=c*i; return c; ,static void Main(string args) int i; long s=0; for (i=2;i=3;i+) s=s+f1(i); System.out.println (s=+s); ,方法嵌套的練習,已知組合數(shù) 求對于任意m、n時的值。,方法的遞歸調(diào)用,一個方法在它的方法體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種方法稱為遞歸方法。 在遞歸調(diào)用中,主調(diào)方法又是被調(diào)方法。執(zhí)行遞歸方法將反復(fù)調(diào)用其自身,每調(diào)用一次就進入新的一層

11、。,例如有方法f如下: public int f(int x) int y; z=f(y); return z; ,簡單方法遞歸的例子,計算n!,public int Factorial( int n ) int p = n; if( n1 ) p *=Factorial(n-1); return p; ,【實例】Hanoi塔問題,題目要求:一塊板上有三根針,A,B,C。A針上套有64個大小不等的圓盤,大的在下,小的在上。如圖11-4所示。要把這64個圓盤從A針移動C針上,每次只能移動一個圓盤,移動可以借助B針進行。但在任何時候,任何針上的圓盤都必須保持大盤在下,小盤在上。求移動的步驟。,【實

12、例】Hanoi塔問題,解題思路: 當n大于等于2時,移動的過程可分解為三個步驟: 第一步 把A上的n-1個圓盤移到B上; 第二步 把A上的一個圓盤移到C上; 第三步 把B上的n-1個圓盤移到C上;其中第一步和第三步是類同的。 當n=3時,第一步和第三步又分解為類同的三步,即把n-1個圓盤從一個針移到另一個針上,這里的n=n-1。,【實例】Hanoi塔問題,Public class Hanoi public void move(int n,char x,char y,char z) if(n=1) System.out.println(x+-”+z); else move(n-1,x,z,y);

13、 System.out.println(x+-”+z); move(n-1,y,x,z); ,【實例】Hanoi塔問題,static void Main(string args) int h; Scanner scan = new Scanner(System.in); Hanoi hanoi = new Hanoi( ); System.out.println(input number:); h= scan.nextInt(); System.out.println(the step to moving “+h+” diskes:); hanoi.move(h,a,b,c); ,遞歸方法的練

14、習,編寫一個遞歸方法,該方法由用戶輸入兩個數(shù)num和n,可以計算num的n次方。,綜合習題,編寫一個求水仙花數(shù)的方法,然后通過主方法調(diào)用該方法求100999之間的全部水仙花數(shù)。所謂水仙花數(shù)是指一個三位數(shù),其各位數(shù)字立方的和等于該數(shù)本身。例如:153就是一個水仙花數(shù):153=1*1*1+5*5*5+3*3*3,綜合習題,請編寫一個函數(shù),輸出整數(shù)m的全部素數(shù)因子。例如:m=120時,素數(shù)因子為: 2,2,2,3,5,局部變量,在程序中,任何變量都有生命期、作用域和可見性的變化。 C#的局部的語法區(qū)域是指方法或方法內(nèi)的代碼塊。,Public class Program int x; void Ran

15、geTesting(int i) int x; x = i; for (int j = i; j 6; j+) x += j; System.out.print(在代碼塊中 x=“+x); System.out.print(局部變量x離開代碼塊,仍在方法中,x=“+ x); System.out.print(字段x在方法中,字段x=“+this.x); void TestingAgain() System.out.print(離開局部變量x所在的方法,x=“+ x); ,【實例】,代碼分析與討論,static void Main(string args) Program mys = new P

16、rogram(); mys.RangeTesting(3); mys.TestingAgain(); System.out.println(在Main方法中,x= + mys.x); ,靜態(tài)多態(tài)(方法重載),不止是構(gòu)造方法可以重載,其實任何方法都能重載 方法重載:就是在同一個類中具有相同名稱,執(zhí)行基本相同操作,但是使用不同的參數(shù)列表的一組方法 編譯器通過參數(shù)的個數(shù)和類型確定調(diào)用重載方法的哪個版本 例:System.out.println(String); System.out.println(int);,重載類型,參數(shù)類型不同 int add(int,int); float add(float

17、,float); 參數(shù)個數(shù)不同 int add(int,int); int add(int,int,int); 注意:若參數(shù)類型和個數(shù)都相同,返回類型不同不算重載,方法重載的作用域規(guī)則,重載機制只有在方法聲明的同一作用域內(nèi)才有效,class first public: void display(); class second public: void display(); ,void main() first object1; second object2; /沒有發(fā)生方法重載 object1.display() object2.display(); ,講解習題,1、編寫minimum3方法,

18、求3個浮點數(shù)種的最小值。由用戶輸入3個值,調(diào)用minimum3方法確定最小值,并顯示該最小值。 2、計算機在教育中的作用越來越大。編寫一個程序幫助小學(xué)生學(xué)習乘法。利用Math.Random產(chǎn)生兩個正的一位整數(shù),并顯示出題目,如:6乘3的積是多少?學(xué)生在提示下輸入結(jié)果。程序檢查該學(xué)生的答案,如果答案正確,打印出“非常棒”,并再出一道題。如果答案錯誤,打印字符串“不對,請再試一次”再讓學(xué)生重做該題,直到做正確為止。利用一個方法來產(chǎn)生題目。,講解習題,3、更復(fù)雜的計算機輔助教學(xué)系統(tǒng)可以監(jiān)測學(xué)生在一段時間內(nèi)的表現(xiàn)。修改習題2的程序累計回答問題的正確和錯誤次數(shù)。在學(xué)生回答10個問題以后,程序計算出回答問題的正確率,若低于75%,程序應(yīng)打印出“請你的老師給你輔導(dǎo)一下”。,講解習題,4、如下圖所示的程序中,若實參a與形參x以引用調(diào)用(call by reference)的方式傳遞信息,則輸出結(jié)果為_;若實參a與形參x以值調(diào)用(call by value)的方式傳遞信息,那么輸出結(jié)果為_。,講解習題,5、如下圖所示的程序中,若調(diào)用f1(x)時,參數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論