目录
一.Java方法的定义与使用、
在使用Java的时候我们需要用代码去实现各种各样的功能,如果将它们放在同一个主函数当中就会使代码显得十分地臃肿不堪,可读性也直线下降。所以我们在实现某个功能的时候会将它另外封装成一个方法,那么不仅可以反复使用它而且增强了代码的美观度和可读性。
下面我们来说一说如何正确定义和使用一个方法吧!
1.方法的定义
我们以一个简单的加法函数为例:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int a = add(x, y);
System.out.println(a);
}
public static int add(int x, int y) {
return x + y;
}
我们仔细观察一下:1.方法在被定义的时候一定要注意,是否需要返回值。根据有无返回值和返回值的类型不同我们在方法明前应当声明出来。如果没有返回值便声明一个void,以上述代码为例,我们需要返回x和y的和,而x和y都是int类型,因此我们也需要返回一个int类型的x+y。
2.方法的使用
在主函数当中,我们在调用自己定义的加法函数add的时候因其是有int类型的返回值的,因此我们同样需要定义一个int类型的变量来接收它的返回值。下面我们来运行这段代码试试。
输入了两个数字后,我们可以看到这个方法已经实现了加法功能。
二.重载
讲完了刚刚的一个例子,相信大家已经对Java当中方法的定义已经有了初步的了解了。那么我们可以设想一个情况:我们有时是整形相加运算,那么我们在需要进行double或是float类型的运算时刚刚定义的方法还能使用吗?答案是否定的。之前我们讲过int类型的数据是4个字节而double类型的数据是8个字节,因此二者正常情况下是并不可以进行运算的。
所以,当我们需要不同的数据运算的时候可以使用方法的重载。以add函数为例:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int a = add(x, y);
double c = scan.nextDouble();
double d = scan.nextDouble();
double f = add(c,d);
System.out.println(a);
System.out.println(f);
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
我们在原来加法函数的下面重新定义了一个add方法,仔细观察可以发现:1.这两个方法的返回值不同 2.形参类型不同 。
我们执行一下试试:
显然,这两个方法都完成了对应的功能。
下面我们来说一下方法的重载需要注意的点:
1.方法名必须与已有方法的方法名相同,否则便不是重载。
2.重载方法的返回值不做要求,可以与原来相同也可以不同。
3.重载方法的形参必须与原来不一样,可以是个数上的不同也可以是类型上的不同。
三.递归
1.递归的定义和使用
在某些特殊的方法中,我们可以看到方法自己调用自己的情况。我们把这类方法叫做递归。
在使用递归的时候要注意:调用时应有约束条件,每递归一次会更加接近这个条件,当满足时递归停止。
下面我们来讲解一个简单递归方法的调用过程:
public static void main(String[] args) {
int a = 4;
int b = sum(a);
System.out.println(b);
}
public static int sum(int n) {
if(n == 1) {
return 1;
} else {
return n + sum(n - 1);
}
}
这是使用递归来求1+2+3+4的值,我们来深入剖析一下这段代码:
上图中蓝色的线代表递,红色的代表归。当n一开始进入函数时,n=4,那么不满足if,所以走else,返回的结果是4 + sum(n - 1)。以此类推,最后n=1逐级返回得到和。
2.青蛙跳台阶
下面有一个有趣的问题:一只青蛙可以一次跳上一级台阶,也可以一次跳上两级台阶,那么有n级台阶,问:青蛙要跳完这n级台阶一共有几种跳法?
我们先来分析一下这个问题:
假如:
1级台阶,那么青蛙只有1种跳法。
2级台阶:第一种:两次1级。第二种:一次2级。
3级台阶:第一种:三次1级。第二种:一开始2级最后1级。第三种:一开始1级,最后2级。
4级台阶:
上图中一种颜色的箭头代表一种跳法,可知一共有5种跳法
到这里我们可以发现,n级台阶的跳法就是n-1级和n-2级台阶的跳法数量的和。
所以我们可以使用递归:
/**
* 青蛙跳台阶
* @param args
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入台阶数:");
int n = scan.nextInt();
int num = jump(n);
System.out.println("有" + num + "种跳法");
}
public static int jump(int n) {
if(n <= 2) {
return n;
} else {
return jump(n - 1) + jump(n - 2);
}
}
那么10级台阶的跳法的数量为: