数学中的函数:F(x)=x^2+3;
y=f(3)=3^2+3=12;
这里的x叫做自变量,y叫做应变量,计算f(3)的过程就是将3带入函数中的x。自变量叫什么无所谓的。
如果在java中,这个问题应该怎么解决呢?
public static void main(String[] args){
int y = f(3);
System.out.println(y);
}
public static int f(int x){
return x*x+3;
}
在java中,x称为形式参数(形参),同样形参的名字无关紧要,当然“见名思意”的原则不能丢。
f是函数名,名字也是无关紧要,但要体现函数的功能。
public static int f(int x)是函数的声明,函数名前的int是表示函数结果的类型,如果函数没有返回值,则为void。
函数的本质:
函数是实现某个独立功能的一段代码。
函数是一个数据加工的黑箱子,它有输入和输出端,输入的数据经过它的加工,得到最终的输出结果。对于这个黑箱子,我们只需要知道怎么就行了,即需要输入什么,可以得到什么,而无需知道内部细节。
函数的关键在于函数的设计,不是函数的实现。
函数设计的三要素:
- 函数名:要根据见名思意的原则结合函数的功能来确定,一般是动词或动名词。如print,printName。如果函数功能是“判断能否。。。”,一般命名为isXXX。
- 输入参数:就是要确定要完成这个功能,外部需要传递什么数据进去,这个是函数设计最关键的。
- 输出结果:函数是实现某个功能的,一般都有明确的结果,那么我们需要确定这个结果是什么类型。如:boolean isPrime(int i)
解决复杂问题的基本思路就是“大事化小”,这也就是函数的核心作用。
案例:输出1000以内的亲密对数
题目:判断两个数是否为亲密对数,亲密对数:如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但包括本身,且a不等于b,则称a,b为亲密对数。
设计如下:
题目中反复出现的“因子和”这个概念,所以可以考虑设计一个函数实现求因子之和。
- 计算n的因子之和m;
- 如果m的因子之和恰好等于n且m≠n是互为亲密数,输出即可。
参考代码:
public class Demo {
public static void main(String[] args) {
for (int i = 1;i<=1000;i++){
int m = sumFact(i);
if (sumFact(m)==i&&m!=i){
System.out.printf("%d和%d是亲密对数",m,i);
}
}
}
private static int sumFact(int n){
int sum = 0;
for (int i=1;i<n;i++){
if (n%i==0){
sum +=i;
}
}
return sum;
}
}