Day08-方法

Day08-方法

方法的学习

方法

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

//语法
public static void 方法名称(){
    //方法主体
}
//将需要在多个位置重复使用的一组代码,定义在方法内部
//方法定义在类的内部,与main方法并列,不可嵌套!

public class TestFunction1{
    public static void main(String[] args){
        //直接输出
        System.out.println("窗前明月光");
        System.out.println("---------");
        System.out.println("疑是地上霜");
        System.out.println("---------");
        System.out.println("举头望明月");
        System.out.println("---------");
        System.out.println("低头思故乡");
        System.out.println("---------");
        /*
        1、for循环打印9个-,i<=9
        for (int i = 1; i <=9; i++) {
			System.out.print("-");
			}
		System.out.println();
		}
        */
    }
}

方法的调用:方法名();

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

//2、用方法打印9个-
public class TestFunction2 {
	public static void main(String[] args) {
        System.out.println("窗前明月光");
        printSign();
        System.out.println("疑是地上霜");
        printSign();
        System.out.println("举头望明月");
        printSign();
        System.out.println("低头思故乡");
        printSign();
	}
	//定义一个打印9个-的功能
	public static void printSign() {
		for (int i = 1; i <=9; i++) {
			System.out.print("-");
		}
		System.out.println();
	}
}

方法参数:形参和实参

作用:方法的参数可以让代码功能更加灵活、普适性更高、易于修改及维护

注意:调用带参方法时,依次传入实参,类型、个数、顺序必须与形参对应

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

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

//形参等价于局部变量声明,实参等价于局部变量的赋值

单个参数

public class TestFunction3 {
	public static void main(String[] args) {
        System.out.println("窗前明月光");
        int a = 9;
        printSign(a);
        //printSign(9);也可
        System.out.println("疑是地上霜");
        printSign(8);
        System.out.println("举头望明月");
        printSign(7);
        System.out.println("低头思故乡");
        printSign(6);
	}
	//定义一个打印count个-的功能
	public static void printSign(int count) {
		for (int i = 1; i <= count; i++) {
			System.out.print("-");
		}
		System.out.println();
	}
}

多个参数

public class TestFunction4 {
	public static void main(String[] args) {
        System.out.println("窗前明月光");
        printSign(9,'#');
        System.out.println("疑是地上霜");
        printSign(9,'-');
        System.out.println("举头望明月");
        printSign(9,'+');
        System.out.println("低头思故乡");
        printSign(9,'*');
	}
	//定义一个打印count个任意符号的功能
	public static void printSign(int count,char sign) {
		for (int i = 1; i <= count; i++) {
			System.out.print(sign);
		}
		System.out.println();
	}
}

如何定义参数:根据具体业务需求,来定义方法的参数。如:用户登录的操作,需要传参String user,String password

返回值与返回值类型

概念:方法执行后的返回操作

定义的返回值类型:基本数据类型、引用数据类型、void

方法执行后,一些情况下有返回结果,一些情况下无返回结果

return value;方法可以返回一个结果,结果类型必须与返回值类型一致

return关键字的两种用法:

return value;//结束当前方法,并伴有值的返回,将值返回到方法调用处(适用于具有返回值类型的方法)

return;//结束方法,直接返回方法调用处(适合具有无返回值类型的方法)

好处:

减少代码冗余

提高复用性

提高可读性

提高可维护性

//定义语法
public static 返回值类型 方法名称(形式参数列表){
    //方法主题
    return value;//返回值 可以返回一个结果,结果类型与返回值类型一致
}
//调用方法
变量 = 方法名称();

public class TestReturnValue1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//调用方式
		//第一种:直接打印
		System.out.println("和是:"+add(2,3));
		//第二种:赋值给合适的变量
		int sum=add(2,3);
		System.out.println("两个数的和是:"+sum);
		//第三种:参与运算
		System.out.println(add(2,3)+10);
		if(add(2,3)==5){
			System.out.println("结果为5");
		}
	}
	/**
	 计算两个数的和
	 */
	public static int add(int a,int b) {
		return a + b;
	}
}

public class TestReturnValue2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//需求:定义一个方法,计算两个整数的和,并返回结果,在main方法中打印
		System.out.println("两个数的和是:"+add(2, 3));
	}
	//定义一个方法,计算两个整数的和,并返回结果
	public static int add(int a,int b) {
		return a + b;
		//return a - b;return表示方法结束了,一个方法只能有一个返回值!!!
	}
}

public class TestReturnValue3{
    public static void main(String[] args){
        String result = isEven(5);
        System.out.println("结果是:"+result);
    }
    public static String isEven(int num){
        if(num % 2 == 0){
            return "偶数";
        }else{
            return "奇数";
        }
    }
}

public class TestReturnValue4 {
	public static void main(String[] args) {
		show();
	}
	public static void show() {
		for (int i = 1; i <= 100; i++) {
			System.out.println(i);
			if (i == 50) {
				//break;结束当前循环
				return;//结束方法
			}
		}
		System.out.println("程序结束");
	}
}

方法根据有无返回值和有无参数分为四类方法

public static 返回值类型 方法名(){
    方法体(功能代码)
}
//1、无返回值无参方法 void()
public static void 方法名(){
    return;//结束方法
}
//2、无返回值带参方法 void(形式参数):局部变量的声明
public static void 方法名(数据类型 变量名1,数据类型 变量名2...){
    return;//结束方法
}
//3、有返回值无参方法 返回值类就是数据类型 由return后面值决定
public static 返回值类型 方法名(){
    return value;//必须写return
}
//4、有返回值带参方法 返回值类就是数据类型 由return后面值决定
public static 返回值类型 方法名(数据类型 变量名1,数据类型 变量名2...){
    return value;//必须写return
}

递归

递归其实就是通过自身调用自身来解决问题的一种方法,将问题划分为更小的子问题,达到解决问题的目的

public class Demo1 {
	public static void main(String[] args) {
		System.out.println("main方法开始");
		m1();
		System.out.println("main方法结束");
	}
	public static void m1() {
		System.out.println("m1方法开始");
		m2();
		System.out.println("m1方法结束");
	}
	public static void m2() {
		System.out.println("m2方法开始");
		System.out.println("m2方法结束");
	}
}

public class Demo2 {
	public static void main(String[] args) {
		m1();
	}
	public static void m1() {
		System.out.println("m1方法开始");
		//无穷递归,溢出
		m1();
		System.out.println("m1方法结束");
	}
}

public class Demo3 {
	public static void main(String[] args) {
		//使用递归实现10以内的阶乘
		//有返回值带参方法
		int result = jiecheng(5);
		System.out.println("阶乘是:"+result);
	}
	public static int jiecheng(int num) {
		if (num == 0 || num == 1) {
			return 1;
		}else {
			return num*jiecheng(num-1);
		}
	}
}

public class Demo4 {
	public static void main(String[] args) {
		//斐波那契数列,需要注意的是,递归实现在计算较大的斐波那契数列时,容易导致栈溢出
		/*
		F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
		0 1 1  2   3  5  8  13  21 34 55
		0 1 2  3   4  5  6  7   8
		*/
		int result = feibo(9);
		System.out.println(result);
	}
	public static int feibo(int num) {
		if(num == 1 ||num == 2) {
			return 1;
		} else {
			return feibo(num - 1) +feibo(num - 2);
		}
	}
}

public class Demo5 {
	public static void main(String[] args) {
        //使用递归计算1-100的和,有返回值带参方法
        int sum = sumOfNumbers(100);
        System.out.println("从1加到100的和是: " + sum);
    }

    public static int sumOfNumbers(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n + sumOfNumbers(n-1);
        }
    }
}
posted @ 2021-07-19 20:02  CN_Darren  阅读(45)  评论(0)    收藏  举报