方法/函数

本文深入探讨了Java中的方法,包括方法的概念、定义、调用、参数、返回值和递归。通过实例展示了如何定义和使用方法,强调了方法在减少代码冗余、提高复用性和可读性方面的重要性,并提供了递归计算阶乘和斐波那契数列的示例。
摘要由CSDN通过智能技术生成

一、引言


要求:以现有知识,至少使用两种方式打印以上效果。

| :----------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n20vXtZ0-1629813560611)(Pictures\静夜思.PNG)] |

二、方法的概念


2.1 方法的概念

概念:实现特定功能的一段代码,可反复使用。

三、方法的定义【重点


3.1 方法的定义

定义语法:

在这里插入图片描述

经验:将需要在多个位置重复使用的一组代码,定义在方法内部。

3.2 定义的位置

方法定义在类的内部,与main方法并列。

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scazOheq-1629813560614)(Pictures\定义位置.PNG)] |

正确位置:位置2、位置4

3.3 定义第一个方法

|                                  || :------------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATLEOx8C-1629813560615)(Pictures\定义第一个方法.PNG)] |

四、方法的调用


4.1 方法的调用

| |
| :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIyM0UD5-1629813560616)(Pictures\方法的调用.PNG)] |

注意:调用方法时,会优先执行方法内部代码,结束后,返回到方法调用处,继续向下执行。

public class TestMethod{
	
	public static void main(String[] args){
		
		System.out.println("床前明月光");
		
		printSign();//对方法的调用

		System.out.println("疑是地上霜");
		
		printSign();

		System.out.println("举头望明月");
		
		printSign();

		System.out.println("低头思故乡");
		
		printSign();

	}
	
	//自定义方法(在一行中输入10个减号,代表分隔符)
	public static void printSign(){

		for(int i = 1 ; i <= 10 ; i++){
			System.out.print("-");
		}
		System.out.println();
		
	}
	
	
}

五、方法的参数【重点


5.1 方法的参数

多数情况下,方法与调用者之间需要数据的交互;调用者必须提供必要的数据,才能使方法完成相应的功能。

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I70gD0iy-1629813560616)(Pictures\方法的参数.PNG)] |

调用方法时,所传入的数据被称为“参数”。

5.2 形参与实参

定义语法:
public static void 方法名称( 形式参数 ){
//方法主体
}

经验:

  • “形参”等价于“局部变量的声明”。

调用语法:

  • 方法名称( 实际参数 );

经验:

  • “实参”等价于“局部变量的赋值”。

作用:

  • 方法的参数可以让代码功能更灵活、普适性更高,易于修改及维护。
5.2.1 单个参数

**|                            || -------------------------- || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QlObwBcX-1629813560617)(Pictures\单个参数.PNG)] |**

public class TestMethod2{
	
	public static void main(String[] args){
		
		//需求:在多次调用printSign方法时,可以打印不同次数的减号
		
		System.out.println("床前明月光");
		
		printSign(5);

		System.out.println("疑是地上霜");
		
		printSign(10);

		System.out.println("举头望明月");
		
		printSign(15);

		System.out.println("低头思故乡");
		
		printSign(20);

	}

	public static void printSign(int count){
	
		for(int i = 1 ; i <= count ; i++){
			System.out.print("-");
		}
		System.out.println();
		
	}
	
}
5.2.2 多个参数

****|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pb67xc7O-1629813560618)(Pictures\多个参数.PNG)] |****

public class TestMethod3{
	
	public static void main(String[] args){
		
		//需求:在多次调用printSign方法时,可以打印不同次数的符号
		
		System.out.println("床前明月光");
		
		printSign(5 , '-');

		System.out.println("疑是地上霜");
		
		printSign(10 , '#');

		System.out.println("举头望明月");
		
		printSign(15 , '*');

		System.out.println("低头思故乡");
		
		printSign(20 , '+');

	}

	public static void printSign(int count , char sign){
	
		for(int i = 1 ; i <= count ; i++){
			System.out.print(sign);
		}
		System.out.println();
		
	}
	
}
5.3 如何定义参数

经验:根据具体的业务需求,来定义方法的参数。

|                                || :----------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rpcwD1o-1629813560618)(Pictures\如何定义参数.PNG)] |

六、返回值与返回值类型

6.1 返回值

概念:方法执行后的返回结果。

方法执行后,一些情况下无需返回结果;另一些情况下则必须返回结果。

例如:

  • 存款操作无需返回结果。
  • 取款操作必须返回结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smK7Nzsr-1629813560619)(Pictures\取款.PNG)]
6.2 定义语法

public static 返回值类型 方法名称( 形式参数列表 ){
//方法主体
return value; //返回值
}

规定返回值的具体类型(基本、引用、void)。

根据需求返回一个结果(值)。

6.3 调用语法

变量 = 方法名称( );

变量类型与返回值类型一致。

6.4 需求

需求:定义方法,计算两个整数的和,并返回结果,在main中打印。

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mj94kfHt-1629813560619)(Pictures\返回值需求.PNG)] |

public class TestReturn{
	
	public static void main(String[] args){
		
		int result = add(5,10);// int result = 15;
		
		System.out.println(result);
		
		//在计算了5+10的总和之后,继续与20进行相加求和
		
		
		int result2 = add( result , 20);
		
		System.out.println(result2);
		
	}
	
	public static int add(int num1 , int num2){
		int sum = num1 + num2;
		return sum;
	}
	
	
}
6.5 return关键字

|                           || :-----------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQIQs9B8-1629813560620)(Pictures\return1.PNG)] |

|                           || :-----------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YL4fIEaJ-1629813560620)(Pictures\return2.PNG)] |

return的两种用法:

  • 应用在具有返回值类型的方法中:
  • return value; 表示结束当前方法,并伴有返回值,返回到方法调用处。
  • 应用在没有返回值类型(void)的方法中:
  • return; 表示结束当前方法,直接返回到方法调用处。

|                           || :-----------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiIbqAJC-1629813560620)(Pictures\return3.PNG)] |

注意:一个类中可以定义多个方法,方法之间属于并列关系,不可嵌套。

经验:一个方法只做一件事。

public class TestReturn2{
	
	public static void main(String[] args){
		
		//double result = calc(1.5 , 10.2);
		
		//System.out.println("计算结果:" + result);
		
		//-------------------------------------------
		
		//String str = isEven(10);
		
		//System.out.println(str);
		
		//-------------------------------------------
		
		show();
		
		
	}
	
	
	public static double calc(double a , double b){
		double sum = a + b;
		System.out.println("运算结束");
		return sum;//结束当前方法,并伴有返回值,返回到方法调用处
	}
	
	public static String isEven(int num){
		if(num % 2 == 0){
			return "偶数";
		}else{
			return "奇数";
		}
	}
	
	public static void show(){
		for(int i = 1 ; i <= 10 ; i++){
			System.out.println("当前值" + i);
			if(i == 5){
				return;//结束当前方法,返回到方法调用出
			}
		}
		System.out.println("show() .............");
	}
}

七、方法的好处


7.1 好处

好处:

  • 减少代码冗余。
  • 提高复用性。
  • 提高可读性。
  • 提高可维护性。
  • 方便分工合作。

八、递归


8.1 多级调用

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNh0j47m-1629813560621)(Pictures\多级调用.PNG)] |

运行结果:
m1() - start
m2() - start
m2() - end
m1() - end

优先执行方法内部代码,结束后,返回到调用处,继续向下执行。

8.2 无穷递归

在这里插入图片描述

运行结果:
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start
m1() - start

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0clPAMV-1629813560622)(Pictures\内存溢出.PNG)] |

8.3 递归

什么是递归?

  • 解决具有既定规律的问题时,在方法内部再次调用自身方法的一种编程方式。

何时使用递归?

  • 当需要解决的问题可以拆分成若干个小问题,大小问题的解决方式相同,方法中自己调用自己。
  • 使用循环解决的常规问题,都可以替换为递归解决。

如何正确使用递归?

  • 设置有效的出口条件,可以让调用链上的每个方法都可以正确返回,避免无穷递归。
8.4 循环阶乘

计算5的阶乘:5!= 5 * 4 * 3 * 2 * 1;

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUrK6Dab-1629813560622)(Pictures\循环阶乘.PNG)] |

循环计算阶乘较为简单,依次与每个值相乘即可。

8.5 递归阶乘

阶乘的定义:n ! = n * (n-1) * (n-2) * (n-3) . . . .

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ssYXz9C-1629813560623)(Pictures\递归阶乘.PNG)] |

在这里插入图片描述

多个方法解决问题的思路相同,同时遵循着相同的规律。

如何整合成为一个方法?

|                             || :-------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQd5GhOI-1629813560623)(Pictures\递归阶乘3.PNG)] |

|                             || --------------------------- || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHBU7jCc-1629813560624)(Pictures\内存溢出2.PNG)] |

在这里插入图片描述

public class TestFactorial{
	
	public static void main(String[] args){
		
		//计算阶乘
		int result = factorial(4);
		
		System.out.println(result);
		
	}
	
	//计算n的阶乘
	public static int factorial(int n){
		
		if(n == 1){
			return 1;
		}
		
		return n * factorial( n - 1 );
	}
	
	/*
	//计算5的阶乘
	public static int getFive(int n){//n = 5
		//逻辑代码
		return n * getFour(n-1);
		//return 5 * 24;
	}
	
	//计算4的阶乘
	public static int getFour(int n){//n = 4
		return n * getThree(n-1);
		//return 4 * 6;
	}
	
	public static int getThree(int n){//n = 3
		return n * getTwo(n-1);
		//return 3 * 2;
	}
	
	public static int getTwo(int n){//n = 2
		return n * getOne(n-1);
		//return 2 * 1;
	}
	
	
	public static int getOne(int n){//n = 1
		return 1;
	}
	*/
	
}
8.6 课堂案例

使用递归完成“斐波那契数列”。

  • 0 1 1 2 3 5 8 13 21 34 55 …
public class TestFibonacci{

	public static void main(String[] args){
		
		//0  1  1  2  3  5  8  13  21  34  55 
		
		int result = fibonacci(6);
		System.out.println(result);
	}

	public static int fibonacci(int n){//项 n = 6
		if(n == 0){
			return 0;
		}else if(n == 1){
			return 1;
		}
	
		return fibonacci(n-1) + fibonacci(n-2);
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值