1.方法的基本用法
1.1什么是方法?
方法就是一个代码片段. 类似于 C 语言中的 "函数"
1.2方法的定义及语法
方法定义:
public static 方法返回值类型 方法名称([参数类型] 形参){
方法体;
return 返回值;
}
return的作用:①结束当前方法 ②带着返回值交给调用处
方法定义时,参数可以没有,若有参数,每个参数需要指定类型;
返回值可以没有,返回类型为void;
方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可.
1.3方法的调用
返回值变量=方法名称 (实参)
方法示例:
public class Homework2_1 {
public static void main(String[] args) {
int sum=0;
for (int n= 1; n<=6; n++) {
int tempRet=factor(n); //调用方法
sum=tempRet;
}
System.out.println("N的阶乘是"+sum);
}
public static int factor(int N) { //定义一个方法factor
int ret = 1;
for (int i = 1; i<= N; i++) {
ret *= i;
}
return ret;
}
}
定义了一个方法求阶乘,并且调用该方法。
1.4形参和实参的关系
实参:真实传递给方法的参数,如 常量、变量、表达式等。调用方法时,实参必须有确定的值,以便传递给形参。
形参:方法名后括号中的变量,只有在方法被调用的过程中才实化(分配内存单元)。形参调用完成后被销毁,形参只在方法中有效。
当实参传递给形参时,形参实质上是实参的一份临时拷贝,对形参的改变是不会影响实参的。
public class Test1 {
public static void main(String[] args) {
int a=10;
int b=21;
swap(a,b);
System.out.println("调用方法后:");
System.out.println("a="+a+",b="+b); //此处的a,b为实参
}
public static void swap(int a,int b){ //此处的a,b为形参
int temp=0;
temp=a;
a=b;
b=temp;
System.out.println("被调用的方法中:");
System.out.println("a="+a+",b="+b);
}
}
输出结果如下:
可见,调用swap方法后,并没有对被调用的实参进行值交换。若要完成值交换,需要引入引用数据类型(数组或对象)。
2.方法重载
发生在同一个类中,方法名称相同,但参数列表(参数个数、参数类型)不同。方法重载与返回值类型,参数名称无关。
public class Test {
public static void main(String[] args) {
double a=10.3;
double b=2.4;
int c=5;
double ret= Max3(a,b,c);
System.out.println(ret);
}
public static int Max1(int a,int b){
return a>b?a:b;
}
public static double Max2(double a,double b){
return a>b?a:b;
}
public static double Max3(double a,double b,int c){
double temp1=Max2(a,b);
return Max2(temp1,c);
}
}
3.方法递归
3.1 什么是方法递归
在一个方法执行的内部,自己调用自己的过程
3.2 使用场景
(1)一个大问题可以拆分成若干个同类型的子问题
(2)拆分后的子问题和原问题除了规模不同,解决思路完全相同
(3)必须存在递归的终止条件
3.3 如何写递归代码
注意方法的语义(函数的功能),可以假设该方法已经写好了(不要纠结内部如何实现),咱们只是调用它。
终止条件+不借助任何方法就可以实现的步骤+剩下的部分用这个方法解决。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("输入要求的斐波那契数:");
int n= scanner.nextInt();
System.out.println("第"+n+"个要求的斐波那契数是:"+fibo(n));
}
public static int fibo(int n){ //定义fibo方法
if(n==1||n==2){ //终止条件
return 1;
}
return fibo(n-1)+fibo(n-2); //调用fibo 方法
}
}