学习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

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操