方法的使用
1.方法的基本使用
1.1什么是方法
方法(method)就是一个代码片段,类似于C语言中的“函数”。
方法存在的意义:
1.是能够模块化的组织代码;
2.做到代码被重复使用,一份代码可以在多个位置使用;
3.让代码更好理解更简单;
4.直接调用现有方法开发,不必重复。
1.2方法定义语法
基本语法
//方法的定义
public static 方法返回值 方法名称(参数列表){
代码体;
}
//方法的调用
返回值变量 = 方法名称(实参)
代码示例:
public class MethodDemo01 {
public static void main(String[] args) {
maxTwoNumber(1,2);
}
//判断两个数的最大值
public static void maxTwoNumber(int a,int b) {
if (a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
}
1.3方法调用的执行过程
基本规则
1.定义方法的时候,不会执行方法的代码,只有调用的时候才会执行
2.当方法被调用的时候,会将实参赋值给形参
3.参数传递完毕后,就会执行到方法体代码
4.当方法执行完毕后,就执行完毕,回到方法调用位置继续往下执行
5.一个方法可以被多次调用
代码示例:
public class MethodDemo02 {
public static void main(String[] args) {
int sumFac = sumFac(5);
int fac = fac(5);
System.out.println(sumFac);
System.out.println(fac);
}
//计算阶乘的和
public static int sumFac(int n) {
int sum = 0;
for (int i = 1; i <= n ; i++) {
sum += fac(i);
}
return sum;
}
//计算阶乘
public static int fac(int n) {
int fac = 1;
for (int i = 1; i <= n; i++) {
fac *= i;
}
return fac;
}
}
2.方法的重载
2.1重载的规则
针对同一个类:
方法名相同;
方法的参数不同;
方法的返回值类型不影响重载。
当两个方法的名字相同,参数也相同,返回值不同的时候,不构成重载。
2.2使用重载
代码示例:
public static void main(String[] args) {
System.out.println(add(10,20));
System.out.println(add(2.5,2.1));
System.out.println(add(2,6,5));
}
public static int add(int a,int b) {
return a + b;
}
public static double add(double a,double b) {
return a + b;
}
public static int add(int a,int b,int c) {
return a + b + c;
}
3.方法递归
3.1递归的概念
一个方法在执行过程中调用自身,就成为“递归”。
代码示例:递归求N的阶乘
public static void main(String[] args) {
System.out.println(fac(5));
}
public static int fac(int n) {
if (n == 1) {
return 1;
}
return n * fac(n - 1);
}
3.2递归执行的过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1cuAC9l-1602664742139)(C:\Users\史威震\AppData\Roaming\Typora\typora-user-images\image-20201014124509661.png)]
程序按照序号中标识的(1) ->(8)的顺序执行
3.3递归练习
代码示例1:按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
public static void main(String[] args) {
print(1234);
}
public static void print(int n) {
if (n <= 9) {
System.out.print(n+" ");
} else {
print(n / 10);
System.out.print(n % 10+" ");
}
}
代码示例2:递归求和
public static void main(String[] args) {
System.out.println(sum(10));
}
public static int sum(int num) {
if (num == 1) {
return 1;
}
return num + sum(num - 1);
}
代码示例3:写一个递归方法,输入一个非负整数,返回组成它的数字之和.
public static void main(String[] args) {
System.out.println(sum(1234));
}
public static int sum(int num) {
if (num < 10) {
return num;
}
return num % 10 + sum(num / 10);
}
代码示例4:求斐波那契数列的第 N 项
public static void main(String[] args) {
System.out.println(fib(1));
System.out.println(fib(6));
System.out.println(fib(20));
}
public static int fib(int num) {
if (num == 1 || num == 2) {
return 1;
}
return fib(num - 1) + fib(num - 2);
}
3.4递归小结
System.out.println(fib(20));
}
public static int fib(int num) {
if (num == 1 || num == 2) {
return 1;
}
return fib(num - 1) + fib(num - 2);
}
### 3.4递归小结
有些问题天然是使用递归方式定义的,有些问题可以递归,也可以循环,相比于递归,非递归程序更加高效。