Java方法

本文深入探讨了Java中的方法,包括基本概念、目的、实例,以及方法的重载和递归应用。通过具体的代码示例展示了如何统计学生成绩、实现方法重载和递归计算,如斐波那契数列、判断闰年等。同时,强调了方法在提高代码复用性和简化结构方面的作用。
摘要由CSDN通过智能技术生成

目录

1.方法的基本概念及结构

2.使用方法的目的

3.方法的实例

 4.方法重载

(1)条件

(2)实例

 5.递归

(1)定义

(2)实例1

1~n求和

前两项求和等于第三项

斐波那契数列

十进制转换为二进制

(3)实例2

 判断闰年

判断素数

判断是否登录成功

画等腰三角形

三个数排序,找出第二大的数

输出 1 1/2 2/3 3/5 5/8 8/13 13/21

计算一下5!+4!+3!+2!+1!

 总结


1.方法的基本概念及结构

 方法是语句的集合,即共同去完成一个功能的集合。

                           

  • 修饰符:可选,决定方法的访问类型。
  • 返回值类型:若为void,则不需要返回值(return);否则,需要返回值,且与方法定义的书记类型要相同。
  • 方法名:方法的名称,与参数共同构成方法签名。
  • 参数列表:指参数的数据类型、顺序及参数个数,当方法被调用时,实参值传递给形参。
  • 方法体:定义该方法的功能。

2.使用方法的目的

(1)实现代码的复用。

(2)使代码结构变得清晰、简单。

(3)提高开发的效率。

3.方法的实例

要求:循环输入学生成绩,如果学生成绩在90~100为 A, 80~89为B, 60~79为C,60分以下为不及格。
   编码实现如下功能:
   - 统计学生的总成绩
   - 统计学生的平均成绩
   - 统计成绩为A,B,C,和不及格人数
   - 计算A,B,C,不及格人数占总考试人数的比例。

public class MethodTest03 {
	static Scanner sc = new Scanner(System.in);
	static int p = 0;//总人数
	static double sum = 0;// 总成绩
	static int Aleval = 0;//等级A的人数
	static int Bleval = 0;//等级B的人数
	static int Cleval = 0;//等级C的人数
	static int NoPassleval = 0;//不及格的人数
	static double average = 0; //平均成绩
	
	public static void main(String[] args) {
		run();
	}
	
	/**
	 * @param tips 提示输入语句
	 * @return int score成绩
	 */
	public static int print(String tips) {
		System.out.print(tips);
		int score = Integer.parseInt(sc.nextLine());
		return score;
	}

	public static String getString(String tips) {
		System.out.print(tips);
		String s = sc.nextLine();
		return s;
	}
	
	/**
	 * 学生成绩统计方法
	 * @param score
	 */
	public static void statistic() {
		int n = print("请输入第"+(p+1)+"个学生的成绩:");
		delay(6);
		System.out.println("数据存储中...");
		
		switch(n/10) {
		case 10:
		case 9:
			Aleval++;
			break;
		case 8:
			Bleval++;
			break;
		case 7:
		case 6:
			Cleval++;
			break;
		default:
			NoPassleval++;
			break;
		}
		p++;
		sum += n;	
	}
	
	/**
	 * 延时函数
	 * @param n 输出.的次数
	 */
	public static void delay(int n) {
		for (int i = 0; i < n; i++) {
			System.out.print(".");
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println();
	}
	
	/**
	 * 平均分
	 * @return
	 */
	public static double Average() {
		return average = 1.0*sum/p;
	}
	
	/**
	 * 统计各等级的人数
	 */
	public static void num() {
		System.out.println("等级A所占人数:"+Aleval);
		System.out.println("等级B所占人数:"+Bleval);
		System.out.println("等级C所占人数:"+Cleval);
		System.out.println("不及格所占人数:"+NoPassleval);
	} 
	
	/**
	 * 统计各等级占总人数的比率
	 */
	public static void ratio() {
		System.out.println("等级A所占总人数的比率"+(1.0*Aleval/p));
		System.out.println("等级B所占总人数的比率"+(1.0*Bleval/p));
		System.out.println("等级C所占总人数的比率"+(1.0*Cleval/p));
		System.out.println("不及格所占总人数的比率"+(1.0*NoPassleval/p));
	}
	
	public static void run() {
		System.out.println("---------------------------------------");
		System.out.println("-----------学生成绩统计系统------------");
		System.out.println("---------------------------------------");
		
		boolean f = true;
		while(f) {
			statistic();
			String str = getString("是否继续输入学生成绩,Y或N:");
			if(str.equals("N")||str.equals("n")) {
				f = false;
				System.out.println("学生总成绩为:"+sum);
				System.out.println("学生平均分为:"+Average());
				num();
				ratio();		
			}
		}
	}
}

 运行结果如下图所示:

 4.方法重载

(1)条件

  • 同一个类中(同class)
  • 方法名要相同
  • 参数列表不同(参数数据类型或参数个数)

(2)实例

public class MethodTest04 {
	public static void main(String[] args) {
		//add()会选择和数据类型最贴近的一种进行运算 {  Debug as一步步去探索}
		System.out.println(add(3,5));
		System.out.println(add(1,2,3,4,5,6,7,8,9,10));
		System.out.println(add(1.2,3));
	}
	
	public static int add(int a,int b) {
		return a+b;
	}

//	public static int add(int a,int b,int c) {
//		return a+b+c;
//	}
	
	public static double add(double a,double b) {
		return a+b;
	}
	
	public static int add(double a,int b) {
		return (int) a+b;
	}
	
	/**
	 * 不限参数的参数列表
	 * @param a-数组[int]
	 * @return
	 */
	public static int add(int ...a) {
		int sum = 0;
		for (int i = 0; i < a.length; i++) {
			sum += a[i];
		}
		return sum;
	}	
}

运行结果如下图所示: 

 5.递归

(1)定义

        递归是允许方法调用自身调用的属性。

public class recursion{
    public static void main(String[] args){
        System.out.println(f(5));
    }

    public static int f(int n){
        if(n==1)
            return 1;
        return n*f(n-1);
    }
}

(2)实例1

  • 1~n求和

  • 前两项求和等于第三项

  • 斐波那契数列

  • 十进制转换为二进制

public class MethodTest05 {

	public static void main(String[] args) {

		System.out.println(sum(100));
		System.out.println(sum1(100));
		System.out.println(fac(4));
		fac1(6);
		binary(9);
	}

	/**
	 * 1~n的和
	 * @param n
	 * @return
	 */
	public static int sum(int n) {
		int s=0;
		for (int i = 1; i <= n; i++) {
			s += i;
		}
		return s;
	}
	
	/**
	 * 1~n的和
	 * @param n
	 * @return
	 */
	public static int sum1(int n) {
		if(n==1) {
			return 1;
		}
		return n+sum1(n-1);
	}
	
	/**
	 * 斐波那契额数列
	 * 1 1 2 3 5 8 13 21
	 * @param n
	 */
	public static int fac(int n) {
		if(n==1 || n==2) {
			return 1;
		}
		return fac(n-1)+fac(n-2);
	}
	
	/**
	 * 前两项之和为第三项的值
	 * @param n
	 * @return
	 */
	public static void fac1(int n) {
		int a = 1;
		int b = 1;
		for (int i = 1; i <= n; i++) {
			int x = a+b;
			System.out.print(x+"\t");
			a=b;
			b=x;
		}
		System.out.println();
	}
	
	/**
	 * 十进制转换为二进制
	 * @param n
	 */
	public static void binary(int n) {
		if(n<2) {
			System.out.println(n);
			return ;
		}
		System.out.println(n%2);
		binary(n/2);
	}
}

运行结果如下图所示:

(3)实例2

  •  判断闰年

  • 判断素数

  • 判断是否登录成功

  • 画等腰三角形

  • 三个数排序,找出第二大的数

  • 输出 1 1/2 2/3 3/5 5/8 8/13 13/21

  • 计算一下5!+4!+3!+2!+1!

public class MathodPractise {
	static Scanner sc = new Scanner(System.in);
	
	final static String USERNAME = "aisal";
	final static String PASSWORD = "123456";
	
	public static void main(String[] args) {
		
		boolean f = isLeap(print("请输入一个年份:"));
		if(f == true){
			System.out.println("是闰年");
		}else {
			System.out.println("不是闰年");
		}
		
		boolean flag = login(printS("请输入用户名:"),printS("请输入密码:"));
		if(flag == true){
			System.out.println("登陆成功!");
		}else {
			System.out.println("登陆失败,用户名或密码有误..");
		}
		
		drawPic01(print("请输入等腰三角形的层数n:"));
		
        findSecond(print("请输入数字a:"),print("请输入数字b:"),print("请输入数字c:"));
		
		isPrimer(print("请输入数字n:"));
		
		boolean f1 = isPrimer1(print("请输入数字n:"));
		if(f1 == true){
			System.out.print("是素数");
		}else {
			System.out.print("不是素数");
		}
		
		System.out.println();
		System.out.println();f(print("请输入数字a:"),print("请输入数字b:"));
		
		System.out.println();
		System.out.println("5!+4!+3!+2!+1!="+sum(5));
	}
	
	public static int print(String tip) {
		System.out.print(tip);
		int t = Integer.parseInt(sc.nextLine());
		return t;
	}
	
	public static String printS(String tip) {
		System.out.print(tip);
		String s = sc.nextLine();
		return s;
	}
	
	/**
	 *判断是否为闰年
	 */
	public static boolean isLeap(int year) {
		if(year%400==0 ||(year%4==0&&year%100!=0)) {
			return true;
		}
		return false;
	}
	
	/**
	 * 判断是否为素数
	 * @param n
	 * @return
	 */
	public static void isPrimer(int n) {
		boolean f = true;
		while (f) {
			for (int i = 2; i < n; i++) {
				if (n % i == 0) {
					f = false;
					System.out.print(n + "不是素数");
					break;
				}
			}
			if (f == true) {
				System.out.print(n + "是素数");
				break;
			}
		}
		System.out.println();
	}
	
	public static boolean isPrimer1(int n) {
		for(int i = 2;i <= Math.sqrt(n);i++) {
			if(n%i == 0)
				return false;
		}
		return true;
	}
	/**
	 * 判断用户名密码是否正确
	 * @return
	 */
	public static boolean login(String username,String password ) {
		if(USERNAME.equals(username) && PASSWORD.equals(password)) {
			return true;
		}
		return false;
	}
	
	/**
	 * 画一个等腰三角形
	 * @param n 高度
	 */
	public static void drawPic01(int n) {
		for(int i=1;i<=n;i++) {
			
			for(int j=1;j<=n-i;j++) {
				System.out.print(" ");
			}
			
			for(int a=1;a<=2*i-1;a++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	/**
	 * 找出第二大数
	 * @param a
	 * @param b
	 * @param c
	 */
	public  static void findSecond(int a, int b, int c) {
		if(a<b){
			int t = b;
			b = a;
			a = t;
		}
		if(a<c) {
			int t = c;
			c = a;
			a = t;
		}
		if(b<c) {
			int t = c;
			c = b;
			b = t;
		}
		System.out.println("第二大的数字为:"+b);
	}
	
	/**
	 * 1 1/2 2/3 3/5 5/8 8/13 13/21 21/34
	 */
	public static void f(int a , int b) {
		if(a>20) {
			return ;
		}
		System.out.print(b+"/"+(a+b)+"\t");
		f(b,a+b);
	}
	
	
	/**
	 * n的阶乘
	 * @param n
	 * @return
	 */
	public static int f(int n) {
		if(n == 1) {          //终止条件
			return 1;
		}
		return n*f(n-1);      //递归公式
	}
	
	/**
	 * 计算一下5!+4!+3!+2!+1!
	 */
	public static int sum(int n) {
		int add = 0;
		for(int i=1;i<=n;i++) {
			add = f(i)+add;
		}
		return add;
	}
}

 总结

        本片文章对方法有一定的总结和实例应用,参数列表中的形参和调用时的实参要区别清楚,编写代码时看清题意对0和1要有选择。希望大家在这篇文章中有所收获!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值