程式設計日記:Java學習之路(五)
5.函式和遞迴:
5.1 函式:
什麼是函式?
Java中的函式是一組程式碼,用來完成一個特定的任務。
我們見過的函式:主函式。
除了主函式以外,還可以定義其它的函式,供主函式呼叫。
在面向物件中,函式被叫做方法。
函式的作用:
避免冗餘程式碼
提高程式碼的可維護性
提高程式碼的重用性
提高程式碼的靈活性
函式的意義:
把統一的功能集中放在一個函式中,利於分工。
定義的位置:
類的內部,其他函式的外部,定義的順序隨意。
函式的組成分為:函式宣告和函式的實現,函式宣告就是這個函式能做什麼,需要做什麼還有做完的結果,而函式的實現就是我們需要怎麼做
函式的宣告:
public static 返回值型別 函式名 (引數表) { …… }
修飾符:
public 公共的,static 靜態的;
返回值型別:
資料型別!(基本資料型別,引用資料型別)
方法名稱:
自己取名儘量使用小駝峰式命名(見文知意)
形參列表:
形式引數:具有引數的形式,沒有具體的值;實際引數:有引數的形式,有具體的值;
方法體:
完成特定功能打程式碼塊
return:
返回規定的返回值,也可以不返回值
public static int numSum(int a,int b,int c){ System.out.println(a+b+c); }
函式的宣告:
(1)返回值型別:
表示函式執行以後返回的結果的資料型別
可以是Java中的任何資料型別
如果沒有結果則為void
(2)函式的宣告:
函式名:
函式的名字,呼叫時表示呼叫哪個函式
命名時需按照識別符號的命名規則
主函式的函式名必須為main
(3)函式的宣告:
引數表:
圓括號括起來的一些變數的定義
多個變數定義之間使用逗號分隔
每一個定義的變數叫做形參
可以沒有形參,但是圓括號不能省略
函式呼叫時用來給函式傳遞資料
函式三要素:
函式名、引數表、返回值型別統稱為函式的三要素,在函式的宣告中缺一不可。
public static void main( String[]args ) { …… }
函式的實現:
函式宣告之後的花括號中的內容
函式功能的具體實現方式
函式的實現要和宣告保持一致
函式的實現程式碼中可以使用宣告中的形參
形參相當於函式內部有效的區域性變數
可以有選擇的使用,可以不用
函式的實現程式碼結束前要使用return語句返回宣告中規定型別的資料
如果宣告中返回值型別為void,則不用返回任何資料
如果有多個分支,保證每一個分支都能返回資料
函式的呼叫:
在其他函式中呼叫一個已定義好的函式:
函式名(引數)
函式呼叫時傳遞的引數叫實參
函式呼叫的過程中,會把實參的值傳遞給函式的形參
呼叫時,實參的個數、型別、順序必須和定義時相同
如果被呼叫的函式有返回值,則可以把函式呼叫看成是表示式
表示式的型別為函式的返回值型別
表示式的值為函式的返回值
呼叫函式時,程式的流程會進入到被呼叫的函式中
被呼叫的函式結束後,程式的流程會回到函式呼叫點
函式呼叫時程式執行的流程:
void main ( ) { …… method1 ( ); …… method1 ( ); …… } void method1 ( ) { …… …… }
函式的巢狀呼叫:
一個函式中又呼叫了其它函式,叫做函式的巢狀呼叫。
一個函式的形參在呼叫其他函式時,可以作為實參傳值。
method1( ) {
System.out.println(“m1 begin”);
method1( );
System.out.println(“m1 finish”);
}
method2( ) {
System.out.println(“m2 begin”);
method3( );
System.out.println(“m2 running”);
method3( );
System.out.println(“m2 finish”);
}
method3( ) {
System.out.println(“m3 running”);
}
5.2 練習:
ATM2.0版本,將各個模組寫成方法呼叫並加入匯率,使用者可以選擇不同的貨幣進行儲存和取款。
import java.util.Scanner; public class Java_day05_04_ATM2{ public static double BALANCE = 10000.0; //查詢餘額 public static void yechaxun(){ System.out.println("您的餘額為:"+BALANCE); } //存款,並讓使用者選擇使用的貨幣 public static void cunkuan(){ System.out.println("請您選擇存入的貨幣種類:1.人民幣 2.美金"); Scanner s = new Scanner(System.in); int xuan = s.nextInt(); switch (xuan) { case 1: System.out.println("請輸入存款金額(人民幣):"); Scanner w = new Scanner(System.in); int cq = w.nextInt(); if (cq >= 0) { BALANCE += cq; System.out.println("存款成功,您的餘額為:" + BALANCE); } else { System.out.println("輸入金額不符,存款失敗"); } break; case 2: System.out.println("請輸入存款金額(美金):"); Scanner q = new Scanner(System.in); int cq1 = q.nextInt(); if (cq1 >= 0) { BALANCE += cq1*6.3976; System.out.println("存款成功,您的餘額為:" + BALANCE); } else { System.out.println("輸入金額不符,存款失敗"); } break; default: System.out.println("無此類貨幣,存款失敗");break; } } //取款,並讓使用者選擇使用的貨幣 public static void qukuan(){ System.out.println("請您選擇取走的貨幣種類:1.人民幣 2.美金"); Scanner s = new Scanner(System.in); int xuan = s.nextInt(); switch (xuan) { case 1: System.out.println("請輸入取款金額:"); Scanner e = new Scanner(System.in); int qk = e.nextInt(); BALANCE -= qk; if (qk >= 0 && qk <= BALANCE) { System.out.println("取款成功,您的餘額為:" + BALANCE); } else { System.out.println("輸入金額不符,或餘額不足,取款失敗"); } break; case 2: System.out.println("請輸入取款金額:"); Scanner q = new Scanner(System.in); int qk1 = q.nextInt(); BALANCE -= qk1*6.3976; if (qk1 >= 0 && qk1*6.3976 <= BALANCE) { System.out.println("取款成功,您的餘額為:" + BALANCE); } else { System.out.println("輸入金額不符,或餘額不足,取款失敗"); } break; default: System.out.println("無此類貨幣,存款失敗");break; } } public static void main(String[] args){ //初始化模組 int password = 123456789; System.out.println("請輸入密碼:"); int use_password1=0; for(int i = 0;i<3;i++){ Scanner s = new Scanner(System.in); int passworduse = s.nextInt(); if(passworduse==password){ while (true) { System.out.print("1.餘額查詢 "); System.out.print("2.存款 "); System.out.print("3.取款 "); System.out.println("4.退出"); Scanner q = new Scanner(System.in); int XuanXiang = q.nextInt(); switch (XuanXiang) { case 1: yechaxun();break; case 2: cunkuan();break; case 3: qukuan();break; case 4: System.out.println("感謝您的使用,再見"); return; } } } if(i<=1){ System.out.println("密碼輸入錯誤"); }else { System.out.println("輸入密碼錯誤三次,程式退出"); } } } }