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