Day05-方法与递归

方法

Java方法是语句的集合,它们在一起执行一个功能

System.out.println()是什么意思

System类中的out对象的println()方法

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        add(a)
        Scanner.close();
        System.out.println(a);//输出2a
    }
    public static int add(int a){
        return a+a;
    }
}

设计方法的原则

遵循原子性原则,一个方法只实现一个功能,便于后续的开发和扩展

方法的定义

修饰符 返回数值类型  (void) 方法名(参数类型 参数名){
    方法体
}

void表示该方法不返回值

方法重载

同样的方法名,但是参数个数不同,或者参数数据类型不同,目的在于应对一对多情况

注意点

  1. 方法名必须相同
  2. 方法参数个数或者类型需要不同
public class Main{
    public static void main(String[] args){
        int a = 10;
        int b = 10;
        int c = 10.0;
        int d = 10.0;
        int e = add(a,b);
        int f = add(c,d);
    }
    public static int add(int a,int b){
        return a+b;
    }
    public static double add(double a,double b){
        return a+b;
    }
}

命令行传参

public class Main{
    public static void main(String[] args){
       for(int i =0;i<args.length){
           System.out.println(args[i])
       }
    }
}

通过命令提示符传参步骤

  1. javac Main.java

  2. 回退到src目录下

  3. java Main this is test

  4. 输出的结果为

    this

    is

    test

可变参数

JDK5新特性

  1. 每一个方法有且只有一个可变参数
  2. 普通参数应在可变参数前定义
public class Main {
    public static void main(String[] args) {
        test(1,9,4,3,25,11);
    }
    public static void test(int... number){
        if(number.length==0){
            System.out.println("此数组长度为0");
        }
        int result = number[0];
        for (int i = 0;i<number.length;i++){
            if(number[i]>result){
                result = number[i];
            }
        }
        System.out.println("该数组中最大的数为:"+result);
    }
}

递归

方法调用方法自身,目的在于将复杂的问题分解,以一种较为高效的形式解决问题

递归组成部分

  1. 退出递归的条件
  2. 递归内容
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(f(n));
        Scanner.close();
    }
    public static int f(int n){
        if(n==1) return 1;
        return n*(n-1);	//阶乘
    }
}

取球问题

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        System.out.println(f(n,m));
        Scanner.close();
    }
    public static int f(int n,int m){
		if (n<m) return 0;
        if (n==0) return 1;	//当小球个数为0时,终止循环
        return f(n-1,m-1)+f(n-1,m);
        //将n个小球分成两个部分,1和n-1,所以m从n个小球中的可能取值为:
        //(1)从n-1个小球中去m个  (2)从n-1个小球中取m-1个再加上1个
    }
}
上一篇:day05


下一篇:day05_案例:轮播图功能测试