代码模块化-方法method
**1、method的概念**
Java方法的目的:
- 模块化
- 复用性
- 应用简单
2、语法
public static int add (int a,int b){
int c = a+b;
return c;
}
- public: 访问控制符
- static: 静态
- int: 方法的返回类型
- add: 方法名称
- int a,int b: 参数列表
- 大括号{ } : 作用域
3、方法的形参和实参
(int a, int b ); // a, b 为方法的形参–形式上的参数可以任意名称
int x = add(4, 6); // 4,6为方法的实参, a=4, b =6
4、方法重载(overload)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法
两同三不同
——同一个类,同一个方法名
——不同:参数列表不同(类型,个数,顺序不同)
——只有返回值不同不构成方法重载
——只有形参的名称不同,不构成方法重载
——与普通方法一样,构造函数也可以重载
4.1
类中复用方法的名称,避免大量的方法名称命名
例如:
add(1,2) //两个数相加
add(1,3,3) //三个数相加
4.2
在同一个类中
方法名称完全相同
方法的参数类型或者数量不同
例如:
public int add(int a , int b){ }
public int add(int a, int b, int c ){ }
4.3 重载实例
/*
* 重载(解决名字一样问题)
* add_int
* add_int_int
* add_double_double
* add_double_int
* add_int_double
*/
public static int add(int a) {// 重载只和参数类型、数量、顺序有关
return a;
}
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(double a, int b) {
return (int) (a + b);
}
5、 不定参数
不定参数是指函数可以接收不确定个数的参数,不定参数用…来表示,它必须要写在正常参数表的后面,例如我们熟知的printf函数: int printf (char *fmt,…);
5.1 不定参数定义
public void func(类型 … 形参名称){
//编译器再运行时将传入的实参,转换为数组执行
}
public void func(int ... a ){
for(int i=0;i < a.length;i++){
System.out.print(a[i] + "\t"); }
}
6、判断一个方法完成年份是否闰年的判定?
public static boolean isLeap(int year){//返回值是boolean注意!!!
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0){
return true;
}
return false;
}
7、判断一个方法完成判定是否位素数?
public static boolean isPrimer(int n){
for(int i =2; i<=Math.sqrt(n);i++){//math.squrt(n)就是根号下n的意思
if(n % i ==0) return false;
}
return true;
}
8、方法-递归
概念:递归算法(recursion algorithm):在计算机科学中指一种通过重复将问题分解为同类的子问题而解决的方法
8.1、递归的执行流程
- 找出递归的中止条件
- 找出解决递归的通项公式
实例:非波契数列
1,1,2,3,5,8
public static void fib01(int n) {
int n1 = 1;
int n2 = 1;
for(int i= 3;i<=n;i++) {//int i = 3,意思是从第三项开始; i++,不是n++!!!!看清楚
int x = n1+n2;
System.out.print(x+"\t");
n1=n2;
n2=x;
}
}
/*
*递归做法
*/
public static int fib02(int n) {
if (n == 1 || n == 2) {//斐波拉契数列的第一项和第二项都是1
return 1;
}
return f(n - 1) + f(n - 2);
}