JavaSE(四)--方法和递归

方法

1.方法作用:

减少代码,实现代码复用;方便后期维护.

2.方法

实现特定功能的一段独立代码块.

3.方法的声明

3.1:语法

访问修饰符 扩展修饰符[static/abstract/final] 返回值类型 方法名
		(数据类型1 参数1,数据类型2 参数2...){
				方法体(代码块);
				return 结果;
}

3.2:访问修饰符

[public/protected/default/private],一般用public修饰符.
作用限制方法 使用权限.

3.3:返回值类型

方法执行完后想返回给调用者的结果的数据类型.
java中任何数据类型都可以作为方法的返回值类型.
如果方法执行完后不想返回任何结果给调用者void.

3.4:方法名

采用驼峰式命名法.

3.5:参数

方法名后台小括号中内容就是参数.执行这个功能需要的材料.参数可以由0个到多个参数,参数之间用逗号隔开.方法声明时参数前面一定要带数据类型.
在方法中,将声明的参数当作已知的局部变量来用.

3.6:return作用:

  • 第一个作用:结束方法,可以在方法的任何地方使用.
  • 第二个作用:结束方法的同时,返回一个结果给调用者.注意:如果方法的返回值类型不为void是其他类型,方法中一定要return 结果,且结果类型返回值类型一致.

3.7:方法与方法之间是平级关系,不能嵌套.

3.8:方法不调用不执行.

3.9:方法分类:

3.9.1:无参无返回值的方法

//eg:/**
	*无参无返回值的方法
	*/
	public static void printline(){
		System.out.println("---------");
	}

3.9.2:有参无返回值的方法

//eg:/**
	*有参无返回值的方法
	*/
	public static void showMyself(String name,int age){
		System.out.println("大家好,我叫"+name+",年龄"+age);
	}

3.9.3:无参有返回值的方法

//eg:/**
	*无参有返回值的方法
	*/
	public static String sweepup(){
		System.out.println("大家在大扫除");
		return "地扫得很干净";
	}

3.9.4:有参有返回值的方法

//eg:/**
	*声明有参有返回值的方法,计算两数之和
	*/
	public static double sum1(double num1,double num2){
		double sum=num1+num2;
		return sum;
	}

4.方法的调用:

  • 无返回值的方法调用的语法:方法名([参数1,参数2…]);
  • 有返回值的方法调用的语法:数据类型 变量=方法名([参数1,参数2…]);
	eg://无参无返回值的方法的调用
		//printline();
		
		//有参无返回值的方法的调用
		//showMyself("张三",18);
		
		//无参有返回值的方法的调用
		String result2= sweepup();
		System.out.println("大扫除的结果为:"+result2);
		
		//有参有返回值方法的调用
		//double result= sum1(1,1);
		//System.out.println("两数之和为:"+result);

5.参数

  • 形参:方法声明时的参数叫形参.形参的参数前面一定要写数据类型.

  • 实参:方法调用时的参数叫实参.实参传具体的值,实参前不可以写数据类型.

  • 传参:把实参的数据传给形参.
    注意: 对同一个方法来说,它的形参和实参的参数个数相同,类型要一致,参数顺序要匹配.

    题目1:抽出一个方法打印一个5行直角三角形,打印的图形从键盘上接收.
    题目2:抽出一个方法打印一个直角三角形,打印的图形和行数从键盘上接收.

6.方法重载的三个条件:

  • 在同一个类中
  • 方法名相同
  • 参数列表不同(个数不同,数据类型不同,参数顺序不同)
	eg:public class MethodTest2{
	/**
	*程序的入口方法
	*/
	public static void main(String[] args){
		//获得具有从键盘上接收数据的能力
		Scanner input=new Scanner(System.in);
		System.out.println("请输入你要打印的直角三角形的图形:");
		String s=input.next();
		System.out.println("请输入你要打印的行数:");
		int row=input.nextInt();
		//调用打印直角三角形的方法
		printTriangle(s);
	}
/**
	*题目1:打印一个5行直角三角形,打印的图形从键盘上接收.
	*/
	public static void printTriangle(String sign){
		System.out.println("-----------一个参数-----------");
		//外层循环控制行数
		for(int i=1;i<=5;i++){
			//内层循环控制每个打印图形个数
			for(int j=1;j<=i;j++){
				System.out.print(sign);
			}
			System.out.println();
		}
	}
}
	/**
	*题目2:抽出一个方法打印一个直角三角形,打印的图形和行数从键盘上接收.
	*/
	public static void printTriangle(String sign,int row){
		System.out.println("----------两个参数------------");
		//外层循环控制行数
		for(int i=1;i<=row;i++){
			//内层循环控制每个打印图形个数
			for(int j=1;j<=i;j++){
				System.out.print(sign);
			}
			System.out.println();
		}
	}

7.方法重载的作用

解决在同一个类中,功能相同的方法的命名问题和调用问题.

8.方法重载的调用

程序根据重载方法的参数列表来判断调用哪个方法.

递归

9.递归

方法自身调用自身.

10.使用递归和条件:

  • 将原问题拆分成若干个子问题,子问题的解决方法与原问题一样.
  • 原问题依赖于所有子问题的解决.
  • 递归一定要有出口.
	//eg:
	public class DiGuiTest1{
		/**
		*程序的入口方法
		*/
		public static void main(String[] args){
			//获得具有从键盘上接收数据的能力
			Scanner input=new Scanner(System.in);
			System.out.println("请输入一个正整数:");
			int count=input.nextInt();
			if(count>=1){
				int result2=factorial(count);
				System.out.println(count+"的阶乘结果为:"+result2);
			}else{
				System.out.println("你的输入有误!");
			}
	}
	
		/**
		*计算一个数的阶乘,返回当前这个数的阶乘结果
		*/
		public static int factorial(int num){
			int result=0;
			if(num==1){
				result=1;
			}else{
				//方法自身调用自身
				result=num*factorial(num-1);
			}
			return result;
		}
}

11.递归选用

简单的问题能用递归解决的,也可以用循环结构解决;复杂问题能用递归解决的,不一定能用循环结构.

个人笔记,思路,仅供参考

你可能感兴趣的:(java,java)