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

news2024/9/20 10:52:01

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! * 5
		4! = 1*2*3*4	-> 4! = 3! * 4
		3! = 1*2*3		-> 3! = 2! * 3
		2! = 1*2		-> 2! = 1! * 2
		1! = 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;
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1354651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Bug】Android BottomNavigationView 图标黑色色块问题

最近在研究Android Jetpack组件&#xff0c;在使用Navigation配合底部导航栏时&#xff0c;发现一个奇怪的问题&#xff0c;如下&#xff1a; 说明&#xff1a;图标来源于Iconfont开源图标库 我的第三个图标变成了一个黑色色块&#xff0c;这个问题前两天我遇见过&#xff0c…

Java 跨平台实现

Java 跨平台实现 1. Java虚拟机&#xff08;JVM&#xff09;2. 中间代码&#xff08;字节码&#xff09;3. Write Once, Run Anywhere (WORA)4. Java 标准库5. 安全性与隔离6. Java Community Process (JCP) Java 的跨平台性主要是通过以下几个关键机制来实现的&#xff1a; 1…

安克创新与火山引擎数智平台开展合作:数据分析降门槛 数据协同破边界

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;消费电子品牌安克创新与火山引擎数智平台&#xff08;VeDI&#xff09;达成合作&#xff0c;双方将聚焦安克创新大数据平台的海量数据分析场景&…

听GPT 讲Rust源代码--compiler(4)

File: rust/compiler/rustc_codegen_gcc/src/back/mod.rs rust/compiler/rustc_codegen_gcc/src/back/mod.rs 文件是 Rust 编译器的源代码中的一个模块&#xff0c;主要负责与 GCC&#xff08;GNU 编译器集合&#xff09;相关的后端代码生成。 在 Rust 编译器的架构中&#xff…

Laya游戏开发中AI寻路解决方案

1.AI自动寻路&#xff1a; 机器人代码重构&#xff0c;按照目标点去执行逻辑&#xff0c;提前几帧判断直线&#xff0c;非直线的情况下&#xff0c;预设转弯角度&#xff0c;角度判断到达直线后开始执行到目标点的逻辑 2.U3D布点寻路 3.NevMesh.Js寻路插件 NevMesh.Js你可以在L…

顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件通过队列外呼拨打另一个sip并且放音 一、添加acl 打开ccadmin->点击配置文件->点击acl.conf->在</list>后面添加一条图中的信息->muqi是我自己设置的名字你们可以修改为自己需要的名字->添加好了点击提交XML->在运维调试点…

【数据仓库与联机分析处理】数据仓库

目录 一、数据仓库的概念 二、数据仓库与操作性数据库的区别 三、发展前期 四、数据仓库的系统结构 五、建模划分 六、主要案例 一、数据仓库的概念 目前很难给数据仓库&#xff08;Data Warehouse&#xff09;一个严格的定义&#xff0c;不准确地说&#xff0c;数据仓库…

C# A* 算法 和 Dijkstra 算法 结合使用

前一篇&#xff1a;路径搜索算法 A* 算法 和 Dijkstra 算法-CSDN博客文章浏览阅读330次&#xff0c;点赞9次&#xff0c;收藏5次。Dijkstra算法使用优先队列来管理待处理的节点&#xff0c;通过不断选择最短距离的节点进行扩展&#xff0c;更新相邻节点的距离值。Dijkstra算法使…

一分钟带你了解支持向量机(SVM)

支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种用于分类问题的监督算法。主要用于二分类和多分类问题。其基本思想是找到一个超平面&#xff0c;能够将不同类别的样本点尽可能地分开&#xff0c;并使得离超平面最近的样本点尽可能远离超平面&…

基于Vue的宿舍管理系统

基于Vue的宿舍管理系统资源-CSDN文库 基于 Koa 以及 VueJS 的宿舍管理系统。 新增功能&#xff1a; 【楼层管理】添加『入住人员信息』模块&#xff0c;显示入住学生、性别、院系、专业的人数&#xff0c;可用饼图表示【用户信息】学生用户添加性别、院系、专业字段【楼层管理…

大洋钻探系列之五“地球号”钻探船

​ “地球号”&#xff08;Chikyu&#xff09;是日本船舶科学技术中心为实施“21世纪海洋钻探规划” 而订造的一艘隔水管型深海钻探船&#xff0c; 主要用于对深海海底地质结构的勘探&#xff0c; 由三井造船工程公司所属的玉野船厂建造&#xff0c; 于2002年1月下水。该船在玉…

ant design pro 5 企业级后台前端框架自定义根路径设置,解决public文件夹下资源在打包部署后出现找不到的问题

关于ant design pro v5的开箱使用方法见&#xff1a;开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置-CSDN博客 在开发过程中为了方便我们可能会将部分静态资源如logo等放入public文件夹&#xff0c;但在设置站点根路径后&#xff0c;publi…

物联网开发点对点通信模式NFC和蓝牙如何无缝结合

随着物联网开发和智能手机的普及&#xff0c;NFC 技术作为一种新兴的技术正在被越来越多新款手机所采用。该技术的发展使得将 RFID 功能集成到手机的设想成为了可能。当前作为传统近距离通信的蓝牙技术也在不断地发展&#xff0c;传输速率跟过去相比也有大幅度的提高&#xff0…

python爬虫实现获取招聘信息

使用的python版本&#xff1a; 3.12.1 selenium版本&#xff1a;4.8.0 urllib版本&#xff1a;1.26.18 from selenium import webdriver from selenium.webdriver import ActionChains import timeimport re import xlwt import urllib.parsedef get_html(url):chrome_drive…

BDZL-V200 4G无线点对点互相传输终端

随着科技的不断进步&#xff0c;智慧产业正成为各行各业的发展趋势。在这个背景下&#xff0c;BDZL-V200&#xff08;简称V200&#xff09;作为一款基于4G无线网络全网通的数据点对点通信技术的无线数据互传终端产品&#xff0c;正式推出市场。该产品将为远方设备的监测、远程抄…

全面开花!聚铭网络入选《ISC 2023数字安全创新能力全景图谱》10大细分领域

日前&#xff0c;《ISC 2023数字安全创新能力全景图谱》重磅出炉&#xff0c;聚铭网络凭借多元化的产品和卓越的创新能力&#xff0c;成功上榜全景图10大细分领域&#xff0c;多项细分领域的入围再一次彰显了聚铭网络过硬的综合安全实力。 据悉&#xff0c;此次全景图是ISC平台…

【数据结构】循环队列(数组实现)

目录 一、循环队列定义 怎么使一个数组在逻辑上呈“环状”呢&#xff1f; 二、循环队列与顺序队列的差异 1、存储方式: 2、操作方式: 3、空间利用率&#xff1a; 4、循环队列判断队空的方式&#xff1a; 5、循环队列判断队满的方式 完整测试代码及注释&#xff1a; 总…

simulink代码生成(九)—— 串口显示数据(纸飞机联合调试)

纸飞机里面的协议是固定的&#xff0c;必须按照协议配置&#xff1b; &#xff08;1&#xff09;使用EasyHEX协议&#xff0c;测试int16数据类型 测试串口发出的数据是否符合&#xff1f; 串口接收数据为&#xff1a; 打开纸飞机绘图侧&#xff1a; &#xff08;1&#xff09…

常见网络协议

1.DNS协议 &#xff08;域名系统&#xff09; DNS协议使用的端口号是53 位于OSI模型中的应用层 DNS系统的作用&#xff1a;将域名&#xff08;网址&#xff09;解析为IP地址。 DNS的基本原理是&#xff1a;将域名映射到IP地址 DNS工作流程 当用户给定一个域名&#xff0…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…