学习JavaEE的日子 day08 方法的重载,递归,万年历

2024-01-04 09:36

本文主要是介绍学习JavaEE的日子 day08 方法的重载,递归,万年历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

day08

1.方法的重载

	>理解:方法与方法之间的关系>		条件:>			1.方法必须在同一个类中>			2.方法名必须一致>			3.参数列表的个数或者类型不一致>			4.与返回值无关>		好处:系统会根据具体实参类型自动匹配到对应的方法中>		应用场景:一个类的多个方法的功能一致,细节实现不一样,就可以考虑使用重载	
	/**定义一个方法的步骤:1.考虑方法名 -- 见名知意2.参数(参数有几个?名字怎么取?参数是什么类型)3.返回值(返回值是什么类型)需求:创建一个方法,传入两个int值,返回最大值 -- getMax创建一个方法,传入三个int值,返回最大值  -- getMax创建一个方法,传入两个double值,返回最大值 -- getMax创建一个方法,传入三个double值,返回最大值 -- getMax*/
public static void main(String[] args){System.out.println(getMax(10,20,30));
}public static int getMax(int a,int b){return (a>b)?a:b;
}public static int getMax(int a,int b,int c){int max = getMax(a,b);max = getMax(max,c);return max;
}public static double getMax(double a,double b){return (a>b)?a:b;
}public static double getMax(double a,double b,double c){double max = getMax(a,b);max = getMax(max,c);return max;
}

2.方法的递归

>概念:方法调用方法自身
	//错误示范://StackOverflowError - 栈内存溢出//前言:方法里声明的变量叫做局部变量,其作用域就在该方法的内部//错误出现的原因:调用方法就会在栈内存开辟空间,用于存放该方法的局部变量,//				  死循环的调用方法,很快栈内存就被装满并溢出了method();
}public static void method(){method();
}

经验:
1.找规律
2.找出口

/**
需求:设计一个方法,传入int类型的数字n,计算n的阶乘分析:5! = 1*2*3*4*5; -> 5! = 4! * 54! = 1*2*3*4	-> 4! = 3! * 43! = 1*2*3		-> 3! = 2! * 32! = 1*2		-> 2! = 1! * 21! = 1			-> 1! = 1找规律:n! = (n-1)! * n;找出口:1! = 1
*/
public static void main(String[] args){int num = getFactorial(5);System.out.println(num);
}public static int getFactorial(int n){if(n == 1){return 1;}else{return getFactorial(n-1)*n;}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

面试题:

/**
需求:不死神兔有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?分析:找规律:当月兔子的对数等于上个月+上上个月找出口:第一个月和第二个月兔子都是一对
*/
public static void main(String[] args){int num = getRabbit(8);System.out.println(num);
}public static int getRabbit(int month){if(month == 1 || month ==2){return 1;}else{return getRabbit(month-1) + getRabbit(month-2);}
}

3.方法版本的万年历

​ 需求:输入年和月,打印当月的日历
​ 线索:1900年1月1日是星期一
​ 分析:
​ 1.输入年和月
​ 2.计算出1900年1月1日到输入年输入月的第一天的总天数
​ 2.1 计算1900年(包含)到输入年(排他)的总天数
​ 2.2 计算1月到输入月(排他)的总天数
​ 2.3 合并总天数
​ 3.计算出当月的第一天是星期几
​ 4.计算当月的天数
​ 5.打印日历

public static void main(String[] args){//1.输入年和月Scanner scan = new Scanner(System.in);System.out.println("请输入年:");int year = scan.nextInt();System.out.println("请输入月:");int month = scan.nextInt();//2.计算出1900年1月1日到输入年输入月的第一天的总天数int allDay = getAllDay(year,month);//3.计算星期几int week = getWeek(allDay);//4.计算当月的天数int day = getDay(year,month);//5.打印日期printCalendar(year,month,day,week);
}//打印日历
public static void printCalendar(int year,int month,int day,int week){System.out.println(year + "年" + month + "月");System.out.println("一\t二\t三\t四\t五\t六\t日");int count = 0;//换行的计数器(逢7换行)//打印空格for(int i = 1;i<week;i++){System.out.print("\t");count++;}//打印日期for(int i = 1;i<=day;i++){System.out.print(i + "\t");count++;if(count % 7 == 0){System.out.println();//换行}}
}//计算星期
public static int getWeek(int allDay){int week = allDay%7;if(week == 0){week = 7;}return week;
}//计算出1900年1月1日到输入年输入月的第一天的总天数
public static int getAllDay(int year,int month){int allDay = getAllDayOfYear(year) + getAllDayOfMonth(year,month) + 1;return allDay;
}//计算1月到输入月的总天数
public static int getAllDayOfMonth(int year,int month){int allDayOfMonth = 0;for(int i = 1;i<month;i++){allDayOfMonth += getDay(year,i);}return allDayOfMonth;
}//计算1900年到输入年的总天数
public static int getAllDayOfYear(int year){int allDayOfYear = 0;for(int i = 1900;i<year;i++){if(isLeapYear(i)){allDayOfYear += 366;}else{allDayOfYear += 365;}}return allDayOfYear;
}//获取当月的天数
public static int getDay(int year,int month){int day = 0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:day = 31;break;case 4:case 6:case 9:case 11:day = 30;break;case 2:if(isLeapYear(year)){day = 29;}else{day = 28;}break;			}return day;
}//判断是否是闰年的方法
public static boolean isLeapYear(int year){if(year%4==0 && year%100!=0 || year%400==0){return true;}return false;
}}

这篇关于学习JavaEE的日子 day08 方法的重载,递归,万年历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568899

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("