![實驗2.4-方法設計_第1頁](http://file4.renrendoc.com/view/62d84f3c18af6fcf8c925840da29de7f/62d84f3c18af6fcf8c925840da29de7f1.gif)
![實驗2.4-方法設計_第2頁](http://file4.renrendoc.com/view/62d84f3c18af6fcf8c925840da29de7f/62d84f3c18af6fcf8c925840da29de7f2.gif)
![實驗2.4-方法設計_第3頁](http://file4.renrendoc.com/view/62d84f3c18af6fcf8c925840da29de7f/62d84f3c18af6fcf8c925840da29de7f3.gif)
![實驗2.4-方法設計_第4頁](http://file4.renrendoc.com/view/62d84f3c18af6fcf8c925840da29de7f/62d84f3c18af6fcf8c925840da29de7f4.gif)
![實驗2.4-方法設計_第5頁](http://file4.renrendoc.com/view/62d84f3c18af6fcf8c925840da29de7f/62d84f3c18af6fcf8c925840da29de7f5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗2.4--方法設計1實驗目的(1)掌握方法的定義與調用關系。
(2)理解方法定義的優(yōu)勢,加深對方法的參數(shù)傳遞與返回類型的理解。(3)了解遞歸的概念及實現(xiàn)特點。2知識要點方法是程序中完成特定功能的程序段,通過定義方法和多次調用方法可縮短代碼的長度,實現(xiàn)代碼復用,使整個應用代碼結構清晰。2.1
方法的定義修飾符1修飾符2...返回值類型方法名(形式參數(shù)表)[throws異常列表]
{
方法體
}
其中:(1)方法頭—--定義方法的訪問特性(public)、使用特性(static)、返回類型、名稱、參數(shù)、拋出異常等。(2)方法體—--實現(xiàn)方法的功能。(3)方法的返回類型與return語句的使用。
除構造方法外,方法均需要定義返回類型,如果方法無返回值,則用void標識。
return語句用于將方法的結果返回給調用者。通常,return語句出現(xiàn)在方法的結尾。通常,對于程序中的每個方法要添加注釋,說明方法的功能以及關鍵實現(xiàn)描述。例如,下面為方法的注釋風格。/**判斷某年是否為閏年,閏年是年份為4的倍數(shù),兩個特殊情況是為100年或400的倍數(shù)如果參數(shù)year是閏年,則返回true否則false
*/booleanisLeapYear(intyear){
booleany4=((year%4)==0);
booleany100=((year%100)==0);
booleany400=((year%400)==0);
return(y400||(y4&&!y100));}2.2
方法的調用方法調用的形式為:
方法名(實際參數(shù)表)其中:(1)實參可以是常量、變量或表達式。相鄰的兩個實參間用逗號分隔。實參的個數(shù)、類型、順序要與形參對應一致。(2)方法調用的執(zhí)行過程是,首先將實參傳遞給形參,然后執(zhí)行方法體。方法返回后,從調用該方法的下一個語句繼續(xù)執(zhí)行。2.3
方法的參數(shù)傳遞Java方法參數(shù)傳遞就是將實參單元的內容傳遞給形參單元;根據參數(shù)類型分以下兩種情形:(1)如果參數(shù)為基本類型數(shù)據,則實參和形參單元存儲的均為數(shù)據本身;參數(shù)傳遞就是將實參的數(shù)據拷貝給形參單元,在方法內修改形參的值,不影響實參。(2)如果參數(shù)為數(shù)組或對象,則參數(shù)單元存放的是引用地址,也就是將實參單元存放的地址拷貝給形參,這樣實參和形參將指向同一數(shù)組或對象。對形參數(shù)組或對象的操作訪問,實際上就是操作實參數(shù)組或對象。因此,在方法內修改參數(shù)的內容將影響實參。2.4遞歸問題(1)遞歸就是方法內直接或間接調用自己。(2)任何遞歸問題均要注意有一個停止點,也就是要有一個不再調用自己的出口。例如:階乘問題的遞歸方法
staticintfac(intn){
if(n==1)return1;
//不再遞歸的出口
else
return
n*fac(n-1);
//遞歸調用自己}以上程序也可以不要else,直接寫成如下形式,思考為什么?
staticintfac(intn){
if(n==1)return1;
return
n*fac(n-1);}編寫遞歸方法注意先寫特殊情形,后寫遞歸情形。(3)在程序中要盡量不用遞歸,因為遞歸的運行效率差。3樣例程序樣例1:編制一個按參數(shù)提示從鍵盤獲取一個字符串的方法,利用該方法讀取兩個整數(shù),求這兩個整數(shù)之間具有最多因子的數(shù)。注:一個數(shù)的因子是指能除盡該數(shù)的數(shù),包括1和自身?!痉治觥恳酪欢ǚ秶鷥日l的因子數(shù)量最多,所以,本例總體上是一個循環(huán)問題。但同時又是一個比較問題。要設法記下誰(n)擁有因子數(shù)量最多(number)?!緟⒖汲绦颉縤mportjava.io.*;publicclassmanyfactor{
publicstaticvoidmain(Stringa[]){
intx=Integer.parseInt(inputString("整數(shù)1:"));
inty=Integer.parseInt(inputString("整數(shù)2:"));
if(x>y){
//交換x,y的值
inttemp=x;x=y;y=temp;
//讓x中存放小者,y中存放大者
}
/*以下找x到y(tǒng)之間擁有因子最多的數(shù)*/
intnumber=count(x);
//記錄因子的最多數(shù)量,先假設x的因子數(shù)最多
intn=x;
//記錄擁有最多因子的那個數(shù)
for(intk=x+1;k<=y;k++){
//循環(huán)求各個數(shù)的因子,看誰真最多
intm=count(k);
//求k的因子數(shù)
if(number<m){
//如果因子數(shù)比最多者還多,則修改n和number
n=k;
number=m;
}
}
System.out.println("最多因子的數(shù)是:"+n+",有因子"+number+"個");
}
/*
統(tǒng)計n的因子數(shù)量*/
publicstaticintcount(intn){
intfactor=1;
//1是n的因子,所以數(shù)量初值為1
for(intk=2;k<=n;k++)
if(n%k==0)
factor++;
//找到一個因子,則因子個數(shù)增1
returnfactor;
}
/*從鍵盤輸入一個字符串的方法,在輸入數(shù)據前先顯示參數(shù)規(guī)定的提示信息*/
publicstaticStringinputString(Stringhint){
Stringx=null;
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
System.out.print(hint);
try{
x=br.readLine();
}catch(IOExceptione){}
returnx;
}}【說明】本例編寫和用到兩個方法,一個方法是count(n)求n的因子數(shù)量,另一個方法是inputString(hint)根據提示信息(hint)從鍵盤獲取一個輸入串,這兩個方法在程序中均多次使用。方法一般是完成一個特殊功能的代碼段的包裝。方法定義的優(yōu)勢是可實現(xiàn)代碼的重用,一方面可使應用更清晰,另一方面也可縮短程序長度?!揪幊碳记伞?1)將統(tǒng)計一個數(shù)的因子數(shù),以及從鍵盤獲取數(shù)據編成方法,在程序中多次使用,可減少代碼長度,方法代碼的功能獨立性,也有利于提高程序的可讀性,方便維護。(2)求一定范圍內找擁有最多因子的問題如何用循環(huán)和條件比較來表示。同時要引入變量記下最多者。樣例2:編寫一個程序找出100~1000之間的所有姐妹素數(shù)。注:姐妹素數(shù)是指相鄰兩個奇數(shù)均為素數(shù)?!緟⒖汲绦颉縫ublicclassSisterPrime{
publicstaticvoidmain(Stringargs[]){
for(intn=101;n<=1000;n+=2)
if(isPrime(n)&&isPrime(n+2))
//相鄰兩個數(shù)均為素數(shù)
System.out.println("\t"+n+"\t"+(n+2));
}
/*判斷一個數(shù)n是否為素數(shù)的方法.如果n為素數(shù),則方法返回結果為true,否則返回false*/
staticbooleanisPrime(intn){
for(intk=2;k<n;k++){
if(n%k==0)
returnfalse;
//只要遇到一個能整除即可斷定不是素數(shù)
}
returntrue;
//循環(huán)結束,說明沒有數(shù)能除盡n
}}【說明】(1)首先要設計判斷一個數(shù)是否為素數(shù)的方法,計算機的解題方法就是逐個測試,只要將小于n的數(shù)(不包括1)去除n就知道,所以方法內要用循環(huán),如果能除盡,說明不是素數(shù),直接返回false。但要返回true,則只能等到循環(huán)結束才能下此結論。(2)找一定范圍滿足條件的姐妹素數(shù),總體上是個循環(huán)問題,要測試的數(shù)均要是奇數(shù),所以循環(huán)控制變量的增值為2。條件的寫法是關鍵,要n和n+2同時是素數(shù),所以用“與”運算符將兩個判斷素數(shù)的方法調用結果連接起來?!揪幊碳记伞?1)此問題要用到的方法是判斷一個數(shù)是否為素數(shù),所以方法的參數(shù)為一個整數(shù),返回值為布爾值;(2)如何表示兩個相鄰奇數(shù),且它們均為素數(shù)的條件式。樣例3:n個元素中取m個的組合公式可用遞歸方式描述如下:
C(n,m)=C(n-1,m-1)+C(n-1,m)
而且,當m=0或n=m時,C(n,m)=1編寫一個遞歸方法求C(n,m),利用該方法輸出楊輝三角形
C(0,0)
C(1,0)
C(1,1)
C(2,0)
C(2,1)
C(2,2)
C(3,0)
C(3,1)
C(3,2)
C(3,3)【參考程序】publicclassyanghui{
publicstaticvoidmain(Stringargs[]){
for(intn=0;n<=3;n++){
for(intm=0;m<=n;m++)
System.out.print("
"+com(n,m));
System.out.println();
}
}
/*利用遞歸求n個數(shù)中取m個的組合*/
staticintcom(intn,intm){
if(m==0||n==m)
return1;
else
returncom(n-1,m-1)+com(n-1,m);
}
}【運行結果】D:\>javayanghui
1
1
1
1
2
1
1
3
3
1【編程技巧】(1)遞歸程序的編寫要考慮特殊情形,當m為0或n等于m時,不再遞歸。(2)楊輝三角形的數(shù)據構成,如何用二重循環(huán)控制輸出。4
上機練習
基本題1)利用求n!的方法計算2!+4!+5!的值。分別利用遞歸和非遞歸方法實現(xiàn)求n!。2)編寫根據三條邊求三角形面積的方法。利用該方法求以下兩個三角形面積。(1)三條邊分別為:3,4,5(2)三條邊分別為:5.3,6.2,83)從命令行參數(shù)獲取兩個整數(shù),找出兩個整數(shù)之間的所有素數(shù),每行輸出3個數(shù)。
提高題1)利用求素數(shù)的方法,就6~20之間的所有偶數(shù)驗證歌德巴赫猜想:
任何一個大于6的偶數(shù)可以分解為兩個素數(shù)之和。2)分別編寫一個方法求兩個整數(shù)的最大公約數(shù)和最小公倍數(shù),輸入兩個整數(shù),計算這兩個整的最大公約數(shù)和最小公倍數(shù)。5思考題1)以下代碼的輸出結果?publicclassTest{
staticintx=5;
publicstaticvoidmain(Stringargv[]){
change(x);
x++;
System.out.println(x);
}
staticvoidchange(intm){
m+=2;
}
}
A.7
B.6
C.5
D.8
2)以下代碼的輸出結果?publicclassTest{
intx=5;
publicstaticvoidmain(Stringargv[]){
Testt=newTest();
t.x++;
change(t);
System.out.println(t.x);
}
staticvoidchange(Testm){
m.x+=2;
}
}
A.7
B.6
C.5
D.8
3)
以下代碼的輸出結果?publicclassTest{
publicstaticvoidmain(Stringargv[]){
Stringx="hello";
change(x);
System.out.println(x);
}
staticvoidchange(Stringm){
m=m+2;
}
}
A.hello
B.hello2
C.編譯報錯
D.運行報錯,不能將串與整數(shù)相加4)設有如下類:classMyPoint{
voidmyMethod(){
intx,y;
x=5;y=3;
System.out.print("("+x+","+y+")");
switchCoords(x,y);
System.out.print("("+x+","+y+")");
}
voidswitchCoords(intx,inty){
inttemp;
temp=x;
x=y;
y=temp;
System.out.print("("+x+","+y+")");
}}如果執(zhí)行myMethod()方法,則輸出結果為?A.(5,3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產權交易合同意向書
- 個人綜合授信貸款合同范文
- 個人房屋租賃合同樣本范本
- 個人房產轉讓合同樣本修訂版
- 中小學教師工資集體合同范本
- 業(yè)務員委托合同范本
- 個人小額信貸合同樣本
- 個人設備租賃標準合同
- 個人車輛保險合同標準模板
- 個人友情借款合同樣本
- 2025年廣西教育出版社有限公司招聘筆試參考題庫含答案解析
- 中醫(yī)膏方臨床應用與制備工藝規(guī)范 DB32/T 4870-2024
- JJG(交通) 208-2024 車貨外廓尺寸動態(tài)現(xiàn)場檢測設備
- 蘇北四市(徐州、宿遷、淮安、連云港)2025屆高三第一次調研考試(一模)英語試卷(含答案)
- 2025年信息系統(tǒng)集成服務公司組織架構和業(yè)務流程
- 西藏自治區(qū)拉薩市城關區(qū)多校2024-2025學年六年級上學期期中英語試題
- 胸外科講課全套
- 2023年海南省公務員錄用考試《行測》真題卷及答案解析
- 公安法制培訓
- 中醫(yī)診斷學八綱辨證課件
- 淺談如何有效提高小學數(shù)學教學質量課件
評論
0/150
提交評論