Java中的方法、重载与递归

方法

理解:具有特定功能的代码块

好处:解决代码的冗余

语法结构

访问修饰符 static 返回值类型 方法名([参数列表]){
    ...代码块...
}

分类:

  • 无参无返回值方法
  • 带参数的方法
  • 带返回值的方法

1、 无参无返回值的方法

语法结构

public static void 方法名(){
    ...代码块...
}

注意

  1. public是修饰符的一种,表示公有
  2. void表示无返回值
  3. 方法在类中声明
  4. 方法与方法之间是平级关系
  5. 方法没有被调用,就是摆设

练习1:模拟游戏人物动作

public class Demo{
    public static void main(String[] args){
        //当方法在调用类的内部时
        run();
        play();
        
        //当方法不在调用类内部时
        Demo.run();
        Demo.play();
    }
    
    //走位
    public static void run(){
        System.out.println("走位");
    }
    
    //释放技能
    public static void play(){
        System.out.println("释放技能");
    }
}

练习2:设计一个方法,打印三角形

public class Demo{
    public static void main(String[] args){
        printRectangle();
    }
    
    //打印三角形的函数
    public static void printRectangle(){
        for(int i=0;i<5;i++){
            for(int j =0;j<i;j++){
                System.out.print(("*"));
            }
            System.out.print(" ");
        }
    }
}

2、带参数的方法

语法结构

public static void 方法名([参数列表]){
    ...代码块...
}

注意

  1. 方法声明时规定的参数:实参/形参
  2. 形参必须声明类型
  3. 形参属于方法的变量,作用域在方法内部,形参也是局部变量
  4. 局部变量:方法里面声明的变量
  5. 调用方法时传入的参数:实参
  6. 形参和实参的类型必须兼容
  7. 实参和形参可以有多个,用逗号分割

练习1:设计一个方法,打印三角形,三角形的行数由调用方传入

public class Demo{
    public static void main(String[] args){
        printRectangle(5); }
    
    //打印三角形
    public static void printRectangle(int n){
        for(int i=0;i<=n;i++){
            for(int j=0;j<i;j++){
                System.out.print("*");
            }
           	System.out.println();
        }
    }
}

练习2:设计一个方法,传入两个int值,输出最大值

public class Demo{
    public static void main(String[] args){
        getMax(10,20);
    }
    
    //判断最大值
    public static void getMax(int a, int b){
        int max = (a>b)?a:b;
        System.out.println(max);
    }
}

3、带返回值的方法

语法结构

public static 返回值类型 方法名([参数列表]){
...代码块...
return 数据;//1.结束当前方法 2.将数据返回给调用方
}

注意

  1. 带返回值的方法有没有参数依据具体需求
  2. 声明方法时需要设置返回值类型
  3. return后接的是具体的数据
  4. 方法功能单一性==(一个方法的功能不要过于强大,不便于后续维护或调用)==
  5. 方法声明是规定的返回值类型return后的数据必须兼容
  6. 返回值只能有一个,如果想返回多个值必须使用数组、集合。。。

练习1:设计一个方法,传入两个int值,返回最大值,在控制台输入三个int值,输出最大值

import java.util.Scanner;

public class Demo{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int a = scn.nextInt();
        System.out.println("请输入第二个数字:");
        int b = scn.nextInt();
        System.out.println("请输入第三个数字:");
        int c = scn.nextInt();
        
        int max = getMax(a,b);
        max = getMax(max,c);
        System.out.println("最大值为:" + max);
    }
    
    //判断最大值
    public static int getMax(int a, int b){
        return (a>b)?a:b;
    }
}

4、方法的重载

概念:方法之间的关系

条件:

  1. 方法必须在同一个类中
  2. 方法名必须一致
  3. 参数列表的长度或类型不一致
  4. 与返回值无关

好处:系统会根据实参的类型自动匹配对应的方法

设计方法的步骤:
  1. 考虑方法名(见名知意)
  2. 考虑形参个数?类型?
  3. 考虑需不需要返回值?返回值的类型?

应用场景:同一个类中,多个方法功能大概一致,但是细节实现不一样,考虑使用重载

练习1:设计一个方法,传入两个int值,返回最大值;

​ 设计一个方法,传入两个double值,返回最大值;

​ 设计一个方法,传入三个int值,返回最大值;

​ 设计一个方法,传入三个double值,返回最大值;

public class Demo{
    public static void main(String[] args){
        System.out.println(getMax(10,12));
		System.out.println(getMax(10,10.2,11.0));
    }
    
    //两个int值
    public static int getMax(int a, int b){
        return (a>b)?a:b;
    }
	//两个double值
	public static int getMax(int a, int b, int c){
		int max = (a>b)?a:b;
		max = (max>c)?max:c;
        return max;
    }
	//三个int值
	public static double getMax(double a, double b){
        return (a>b)?a:b;
    }
	//三个double值
	public static double getMax(double a, double b,double c){
		double max = (a>b)?a:b;
		max = (max>c)?max:c;
        return max;
    }
}

5、方法的递归

概念:方法调用自身

注意:递归是一种程序设计思想

经验:

  1. 找规律:什么情况下应该使用递归?
  2. 找出口:什么情况下解决该方法?

练习1:不死神兔(斐波那契数列):有1对兔子,从出生后的第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子
设计一个方法,传入月份,获取当月兔子的对数

import java.util.Scanner;

public class Demo{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
		System.out.println("请输入月份:");
        int num = fib(10);
		System.out.println("第10个月后得到兔子有" +num+ "对");
    }
    
	//斐波那契额数列
	public static int fib(int n){
		if(n==1||n==2){
			return 1;
		}else{
			return fib(n-1)+fib(n-2);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖把湛屎,戳谁谁死

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值