7.6 函数的功能
下面的第3行代码是一次函数调用,称为main函数调用func函数
public static void main(String[]args){
int a=6;
int b=func(a);
System.out.println(b);
}
函数的调用,可以出现在main函数,也可以在别的函数。例如A函数调用了B函数,然后main函数又调用了A函数。现在我们要学会这样来“使用”函数。
看下面的题目:
定义一个函数,以一个整数为参数,返回该整数的绝对值。
这个函数能得到一个数字的绝对值,假设这个函数的名称是abs。
现在看下面这道题目:
定义函数,用Java写出函数f(x)=x*x+5|x|+6,x的类型是整数。
这道题目里面又有一个绝对值,我们可以使用已经写好的绝对值函数,来完成这道题:
public static int abs(int x){
return x>0?x:-x;
}
public static int func2(int x){
int y=x*x+5*abs(x)+6;
return y;
}
abs(x)函数是得到x的绝对值,然后func2调用了abs函数(第5行代码)。在main函数调用一下func2试试?
如果把所有代码都到一个函数里面,那么就会复杂一点,同时会有重复的代码存在,这类冗余代码是要避免的。
其实,函数的最主要作用是:将复杂问题化成若干个简单函数,然后逐个解决。
下面我们来用这个分解问题的方法,来解决这个问题:
输入两个数字,求它们的最大公约数。
最大公约数是两个数字都能整除的最大数字。解题思路是这样的:
1.i从2开始,max为1,num为两个数较小的数字
2.假如i小于等于num,进入第3步,否则算法结束,max就是最大公约数
3.判断i能不能被两个数整除,如果能,将i的值赋给max。进入第4步。
4.i++,回到第2步
关于这些初值这么设置,是这样的原因:
i没必要从1开始,因为1必定能被任何整数整除,
max初值设定为1,如果max的值一直都没有改变,那么1就是两个数的最大公约数,所以max的初值不能随便设置(例如设为0是不行的)
num设置为两个数中较小的数,是为了减少循环次数。
可分解成下面这些函数:
int min(int a,int b),返回a和b较小的那个数。
boolean canBeDivide(int a,int b),a能被b整除,返回true,否则返回false
下面我们来实现它们,最终通过函数调用,完成最大公约数。