方法-基础

概念:就是一种封装,使代码结果变得清晰,容易复用。

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

细节:方法实现不调用不执行
 方法与方法之间是平级的,哪怕是main方法跟普通方法也是平级的。

定义以及调用语法:

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

//调用
方法名称(实际参数);

未使用方法前的弊端:

问题:每次循环打印繁琐,且冗余多

public class NoArg1 {
	public static void main(String[] args) {
		System.out.println("床前明月光");
		
		for(int i=1;i<=10;i++) {
			System.out.print("*");
		}
		System.out.println(); //回车
		
		System.out.println("疑是地上霜");
		
		for(int i=1;i<=10;i++) {
			System.out.print("*");
		}
		System.out.println(); //回车
		
		System.out.println("举头望明月");
		
		for(int i=1;i<=10;i++) {
			System.out.print("*");
		}
		System.out.println(); //回车
		
		System.out.println("低头思故乡");
		
		for(int i=1;i<=10;i++) {
			System.out.print("*");
		}
		System.out.println(); //回车
	}
}


解决方案:将循环的冗余代码,抽取出去,使用时,通过标记调用

1、无参数无返回值方法

方法的实现语法结构:
void: 无返回值类型
 public static void 方法名(){
       方法体
  }
 方法调用的语法结构:
 方法名();

public class NoArg2 {
	public static void main(String[] args) {
		System.out.println("床前明月光");
		print();   //方法调用
		System.out.println("疑是地上霜");
		print();   //方法调用
		
		System.out.println("举头望明月");
		
		print();   //方法调用
		
		System.out.println("低头思故乡");
		
		print();   //方法调用
	}
	//方法实现(方法定义)
	public static void print(){
		for(int i=1;i<=10;i++) {
			System.out.print("*");
		}
		System.out.println(); //回车
	}
}

2、有参数无返回值方法

方法实现语法结构:
 public static void 方法名(参数1, 参数..){
  }
 
 方法调用:  方法名(实参1, 实参..)

传参,把变动的东西抽取出去,从外面传入---提升复用性

debug调试:1.加断点    2.debug as..运行  f6: 单步执行    f8:跳到下一个断点,如果没有下一个,则结束   f5:进入方法内部

传单个参数:

public class HaveArg1 {
	public static void main(String[] args) {
		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 class HaveArg2 {
	public static void main(String[] args) {
		System.out.println("床前明月光");
		print(10,"*");   //方法调用--实参
		System.out.println("疑是地上霜");
		print(12,"-");   //方法调用
		
	}
	//方法实现(方法定义)
	public static void print(int n,String c){ //形参
		for(int i=1;i<=n;i++) {
			System.out.print(c);
		}
		System.out.println(); //回车
	}
}

3、有参数有返回值方法(常用) 提高了扩展性

 方法实现语法结构:
 public static 数据类型 方法名(参数){
 方法体;
  return 值; //值的类型要匹配数据类型
}
方法调用语法结构:  数据类型  变量 = 方法名(实参);

3.1求两个变量的和:


public class HaveReturn1 {
	public static void main(String[] args) {
		int sum = add(1, 2);
		System.out.println("和为:"+sum);
		
		
	}
	
	//有参数有返回值方法,返回数据类型为int类型
	public static int add(int a,int b) {
		int sum = a+b;
		return sum; //return的值也必须是int类型
	}
}

3.2判断是否为素数:

public class HaveReturn2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int num = scanner.nextInt();
		
		boolean flag = isSuShu(num); //有参数有返回值方法
		if(flag) { //判断素数
			System.out.println(num+"是素数");
		}else {
			System.out.println(num+"不是素数");
		}
		
	}
	
	public static boolean isSuShu(int num) {
		for(int i=2;i<num;i++) {
			if(num%i==0) { //找到了除1和本身以外能整除的数
				return false;  //return会跳出方法体
			}
		}
		return true; //跳出方法体
	}
}

4、return的使用

4.1用在有返回值的方法中

特点:方法体的最后必须要有 return 值;  如果用在分支语句中,每个分支都要有return 值;

public class Return1 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int num = scanner.nextInt();
		String a = returnResult(num);
		System.out.println(num+"是"+a);		
	}

	public static String returnResult(int num) {
	    if(num%2==0) {
	    	return "偶数";
	    }else {
	    	return "奇数";
	    }
	}
}

4.2使用在无返回值的方法中

特点: return不能带值--return; 一般用于特殊的退出,而不是放到最后面

public class Return2 {
	public static void main(String[] args) {
		printNum(10);
		
	}

	private static void printNum(int num) {
		for(int i=1;i<=num;i++) {
			if(i%3==0) {
				break;  //退出循环
				//return;   //退出方法体
			}
			System.out.println(i);
		}
		
		System.out.println("方法体结束...");
	}
}

4.3return应用案例:

//return应用:请输入取款信息:1.开户  2,取款  3,存款  4,退出
public class Return3 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		do {
			System.out.println("请输入取款信息:1.开户  2,取款  3,存款  4,退出");
			int n = scanner.nextInt();
			switch (n) {
			case 1:
				System.out.println("开户成功");
				break;
			case 2:
				System.out.println("取款成功");
				break;
			case 3:
				System.out.println("存款成功");
				break;
			case 4:
				System.out.println("退出");
				System.out.println("执行了退出功能~~~");
				return;  //跳出函数体
			default:
				System.out.println("输入有误~~");
				break;
			}
		}while(true);
		
	}
}

5、方法多级调用

方法的多级调用: 方法调用实现后,在实现处,继续调另一个方法的实现

public class Method1 {
	public static void main(String[] args) {
		System.out.println("main start");   //1
		m1();
		System.out.println("main end");     //5
	}

	private static void m1() {
		System.out.println("m1 start");  //2
		m2();
		System.out.println("m1 end");    //4
	}

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

6、递归方法

递归方法:自己调用自己,必须要有退出的出口,否则就是死递归 
说明:如果能用其他方式处理,尽量不要使用递归; 
递归有两个弊端: 1.容易出现死递归  2.执行效率很低
应用场景:1.文件操作     2.算法
递归的设计规则类似循环,一般情况下能用循环操作的,都可以使用递归
递归的操作步骤:
1.定义方法,设计有规律的数列(调用自己的规则)
2.必须有退出的出口

6.1求阶乘案例

案例:请求出指定数的阶乘: 4=1*2*3*4=24  3=1*2*3=6
4的阶乘: 4*3的阶乘
3的阶乘: 3*2的阶乘
2的阶乘:2*1的阶乘
1的阶乘:1

public class DiGui1 {
	public static void main(String[] args) {
		//m1(); 
		//递归操作,往往方法名写的简单;  注意:如果有返回值,则可直接打印方法调用
		//求4的阶乘--》24
		System.out.println(f(4));   //1*2*3*4
	}

	private static int f(int n) {///4
		if(n==1) {
			return 1;  //1的阶乘返回1
		}
		return f(n-1)*n; //
	}

	private static void m1() {
		System.out.println("一直调自己");
		m1();   //死递归
	}
}

6.2斐波拉切数列

起始第一项为0,第二项为1;从第三项开始,某个项数值=前面两项的和
0 1 1  2  3  5  8  13  21...

public class DiGui2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入你的项数:");
		int num = scanner.nextInt();
		for(int i=1;i<=num;i++) {
			//第四项的结果=第三项+第二项
			System.out.print(f(i)+" "); //f(2)+f(1)+f(2)  
		}
	}

	private static int f(int n) {
		if(n==1||n==2) {
			return n-1;
		}
		return f(n-1)+f(n-2);
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值