java学习之路5-----java中的方法调用、return细节、递归、斐波那契数列

目录

一、方法

1.无参数无返回值

2.有参数无返回值

3.有参数有返回值

二、return的细节

1.return带值

2.return不带值

三、多级调用

四、递归

1.死递归

2.递归案例

3.斐波拉契数列

五、总结


一、方法

概述:方法就是封装,将经常复用的代码抽取出去,实现多次调用

好处:使程序结构更清晰,易于复用

组成:方法调用,方法实现(定义)

分类:无参数无返回值方法,有参数无返回值方法,有参数有返回值方法

1.无参数无返回值

public static void main(String[] args) {
    //案例:打印静夜思,每打印一句,则打印10个‘-’
    //使用方法进行封装
    System.out.println("床前明月光");
    print();   //方法调用

    System.out.println("疑是地上霜");
    print();   //方法调用

    System.out.println("举头望明月");
    print();   //方法调用

    System.out.println("低头思故乡");
    print();   //方法调用
}
//方法实现处需要修饰符:public static void无返回值类型
//print():表示没有参数的print方法
public static void print(){
    for(int i=1;i<=10;i++) {
        System.out.print("-");
    }
    System.out.println();  //换行
}

方法特点:方法不调用不执行; 方法与方法之间平级关系,不能嵌套定义

2.有参数无返回值

带参数的好处:进一步提升了方法的复用性

public static void main(String[] args) {
    //案例:打印静夜思,每打印一句,则打印10个‘-’
    //需求:使用方法进行封装,第一句打印10分‘-’,二打印12个‘-’,依次类推
    //可以使用有参数无返回值方法
    System.out.println("床前明月光");
    print(10);   //实参-调用处传入的参数
    System.out.println("疑是地上霜");
    print(12);   //方法调用

}
public static void print(int n){ //形参-定义处的参数
    for(int i=1;i<=n;i++) {
        System.out.print("-");
    }
    System.out.println();  //换行
}

带两个参数的案例

public static void 方法名(int a,int b){}

带两个参数,中间使用‘,’隔开即可

public static void main(String[] args) {
    //带两个参数的案例:
    //案例:打印静夜思,打印符号个数与符号,从参数中传入
    System.out.println("床前明月光");
    print(10, '#');
    System.out.println("疑是地上霜");
    print(12, '&');
}

public static void print(int n,char f) {
    for(int i=1;i<=n;i++) {
        System.out.print(f);
    }
    System.out.println();  //换行
}

3.有参数有返回值

返回值的好处:可扩展性更强

在后续的应用中,往往大多数场景下都会使用有参数有返回值的方法,这是最完整的功能的封装

ublic static void main(String[] args) {
    //有参数有返回值方法:
    //案例:求两个数的和
    int sum = add(1,2);
    System.out.println("和为:"+sum);
}

//方法实现处需要有int返回值类型;方法体中对应有return 值; 具体值由返回值类型约束
public static int add(int a,int b) {
    int sum = a+b;
    return sum;
}

二、return的细节

return表示跳出方法体,一般情况放到方法体的末尾;常用在带返回值的方法中,但也可放在无返回值方法中,只是不能带值;

注意:一个方法往往只做一种功能;例如:add-加法 sub-减法

1.return带值

public static void main(String[] args) {
    //return应用在带返回值方法的细节说明:
    //问题:能否在方法实现中多次重复return 值;
    //答案:不行,后面的return是不可到达的

    //可以写多次return的情况:在方法中有条件判断,每个出口都可以return 值;

    int res = calc(2,1);
    System.out.println("计算结果:"+res);
}

public static int calc(int a, int b) {
    if(a>5) {
        return a-b;
    }else {
        return a+b;
    }

    //return a-b;  //不可到达的代码
}

2.return不带值

public static void main(String[] args) {
    //案例:循环1~10,遇到3的倍数则结束,用方法封装
    //分许:需要打印多个值,所以无需返回值;
    print();
}

public static void print() {
    for(int i=1;i<=10;i++) {
        if(i%3==0) {
            //break; //跳出循环
            return;  //跳出方法体
        }
        System.out.println(i);
    }
    System.out.println("方法最后...");
}

三、多级调用

方法的多级调用,也就是在方法实现中继续调另一个方法;多级调用,主要弄清楚调用的执行流程

public static void main(String[] args) {
    //方法的多级调用案例:
    System.out.println("main开始");  //1
    a();
    System.out.println("main结束");  //5
}

private static void a() {
    System.out.println("a的开始");  //2
    b();
    System.out.println("a的结束");  //4
}

private static void b() {
    System.out.println("b的方法执行...");  //3
}

四、递归

概述:自己调用自己,且需要有退出出口;如果没有出口,则是死递归

应用:往往能用循环的案例,则可使用递归

注意:能用其他方式解决,尽量不要用递归,因为有两个弊端。

弊端:1.容易死递归 2.执行效率低

应用场景:很少用,一般用在文件中,某些算法(例如链表)

1.死递归

public static void main(String[] args) {
    //a();  
}

private static void a() {
    System.out.println("死递归,无用");
    a(); //死递归,无退出出口
}

2.递归案例

public static void main(String[] args) {
    //递归案例:求n的阶层   4的阶层
    //4!->4*3的阶层
    //3!->3*2的阶层
    //2!->2*1的阶层
    //1!->1(退出出口)
    //递归是一个自己调自己方法,方法名往往写的较简单,例如: f()
    //递归的步骤:
    //1.找重复调用的规律
    //2.需要定义方法
    //3.设计退出出口
    System.out.println(f(4));  //4的阶乘
    //注意:如果有返回值类型,则直接可以打印该方法调用
}

public static int f(int n) {
    if(n==1) {
        return 1;
    }
    return n*f(n-1);
}

3.斐波拉契数列

规则:第一个数为0,第二个数为1;第三个=第1个+第2个;依次类推

分析:可以将每一项定一个标记值:0项,1项,2项...只需要循环,即可将所有数据打印输出

public static void main(String[] args) {
    //斐波拉契数列:0,1,1,2,3,5,8,13....
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入项数(从0开始):");
    int n = sc.nextInt();
    for(int i=0;i<=n;i++) {
        System.out.print(f(i)+"\t");
    }
}
public static int f(int n) {
    if(n==0||n==1) { //第0项则返回0,第1项则返回1
        return n;
    }
    return f(n-1)+f(n-2); //等于前两项的和
}

五、总结

1.引言
未使用方法前的某些场景冗余代码太多
2.方法(重点)
概述,作用,组成,分类
带参数好处;带返回值的好处
3.return的细节(重点)
return用在返回值方法中;return 值;
return用在无返回值方法中; return;  与break的区别
4.多级调用
了解概述及多级调用流程
5.递归(扩展)
概述,应用场景,步骤;
案例:求阶层; 斐波拉契数列

各位客官请听下回分解

创作不易,如果觉得还不错的话,可以点个赞给我个鼓励嘛🙌🙌🙌🙌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值