1. 程式人生 > 其它 >程式設計日記:Java學習之路(五)

程式設計日記: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("輸入密碼錯誤三次,程式退出");
            }
        }
    }
}