编程日记: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("输入密码错误三次,程序退出");
            }
        }
    }
}

相关