学习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! * 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.mfbz.cn/a/288866.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React(2): 使用 html2canvas 生成图片

使用 html2canvas 生成图片 需求 将所需的内容生成图片div 中包括 svg 等 前置准备 "react": "^18.2.0","react-dom": "^18.2.0","html2canvas": "^1.4.1",实现 <div ref{payRef}></div>const pa…

阿里云性能测评ESSD Entry云盘、SSD云盘、ESSD和高效云盘

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

循环与基础函数

循环与函数 1.循环的三种方式2.循环的中断与空语句3.函数的定义与使用4.参数的作用域5.指针6.总结 1.循环的三种方式 我们最熟悉的循环为for和while&#xff0c;这两种循环方式在Python系列介绍过。在C中&#xff0c;循环的基本逻辑同Python是类似的。c中while循环的语法如下&…

案例088:基于微信小程序的校车购票平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

thumbnailator 基本使用教程

thumbnailator 基本使用教程 本文中的 Demo 项目使用 SpringBoot 创建&#xff0c;代码仓库地址: thumbnailator-study: 使用 Thumbnailator 库的 Demo 程序&#xff0c;演示地址: www.huhailong.vip/thumbnailator-study。我的站点。) 使用 thumbnailator 库来操作图片非常的…

大语言模型LLM微调技术:P-Tuning

1 引言 Bert时代&#xff0c;我们常做预训练模型微调&#xff08;Fine-tuning&#xff09;&#xff0c;即根据不同下游任务&#xff0c;引入各种辅助任务loss和垂直领域数据&#xff0c;将其添加到预训练模型中&#xff0c;以便让模型更加适配下游任务的方式。每个下游任务都存…

基于华为ENSP模拟器-vlan划分网络

需求 不连外网的内网。需求隔离故障和隔离广播风暴&#xff0c;并要保证网络的连通。 解决方案使用三层交互机&#xff0c;设置vlan用于隔离网络&#xff0c;并在三层交互机为网关保证各个vlan之间的通讯。 实现 使用三层交互机&#xff0c;设置vlan用于隔离网络&#xff0…

广州怎么找工作哪里工作机会多

广州找工作上 吉鹿力招聘网 打开 吉鹿力招聘网 “注册账号”&#xff0c;然后输入个人基本信息&#xff0c;进行注册&#xff08;可使用手机号注册&#xff0c;也可以使用邮箱注册&#xff09;。 填写求职意向&#xff0c;基本信息点击“下一步”。 填写工作经历点击“下一步”…

【感知机】感知机(perceptron)学习算法的原始形式

感知机( perceptron )是二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1 和-1二值。感知机对应输入空间(特征空间)中将实例划分为正负两类的分离超平面&#xff0c;是一种判别模型。感知机是神经网络与支持向量机的基础…

湖南大学-算法设计与分析-2023期末考试【原题】

前言 21&#xff1a;00刚刚结束的考试&#xff0c;凭着回忆把题目重现出来了&#xff0c;在复习的时候根本找不到往年的试卷&#xff0c;希望这张回忆的试卷能帮助到下一届的同学。知道题目基本上就能做出来了&#xff0c;但是不知道是真的做不出来&#xff0c;我就不给答案了…

交换机02_共享式交换式

1、共享式网络 早期的以太网是共享式网络&#xff0c;它是由集线器&#xff08;HUB&#xff09;相连&#xff0c;由一个HUB相连了两台主机&#xff0c;形成一个冲突域也称广播域。 &#xff08;1&#xff09;相关名词解释 集线器 HUB中心的意思&#xff0c;集线器就是对接收…

域传送漏洞

DNS解析 当用户访问域名时浏览器解析首先会查看浏览器缓存是否有对应的ip&#xff0c;如果没有则会到本地host文件中查看是否有对应的ip&#xff0c;如果没用则会将域名发送给本地区的DNS服务器. DNS服务器分为递归服务器&#xff0c;根服务器&#xff0c;权威服务器 首先是递…

【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Docker-compose使用全解 一)

Docker-compose使用全解 Compose介绍Compose的作用和职能 Compose和Docker兼容性安装docker-compose添加可执行权限 Docker Compose常用配置imagebuildcontext上下文指定镜像名args构建环境变量 commanddepends_onports特殊映射关系 volumesenvironment Docker Compose命令详解…

牧云主机管理助手 —— 一款免费且便捷的服务器运维工具

牧云主机管理助手 —— 一款免费且便捷的服务器运维工具 在日常运维工作中&#xff0c;服务器管理是一项至关重要的任务。对于许多企业和个人而言&#xff0c;这往往意味着需要投入大量的时间和精力。然而在一些运维工具的帮助下&#xff0c;服务器运维工作也可以变得高效快捷…

pytest conftest定义一个fixtrue获取测试环境地址

方便全局切换地址 pytest.fixture() def config():data {测试环境: {A环境: 127.0.0.1,B环境: 127.0.0.2,C环境: 127.0.0.3,D环境: 127.0.0.4},}return data.get(测试环境, {}).get(A环境)import pytestdef test_case001(config):url http://str(config):8080/api/user/logi…

RocketMQ5.0消息过滤

前言 消费者订阅了某个主题后&#xff0c;RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息&#xff0c;可通过设置过滤条件在 Broker 端进行过滤&#xff0c;只获取到需要关注的消息子集&#xff0c;避免接收到大量无效的消息。 以电商交易场景为例…

Vue3 结合typescript 组合式函数(2)

安装axios&#xff1a;npm install axios 1、hooks文件夹下新建useURLLoader 在APP.VUE中使用useURLLoader 使用Dog API 2、使用对象中的属性&#xff0c;必须使用toRefs&#xff0c;否则Reactive响应失效 3、使用泛型 结果&#xff1a;

爬虫如何获取免费代理IP(二)

89ip代理爬取代码实现 一、代码实现 import requests import time import random from fake_useragent import UserAgent from lxml import etree import os import csv""" 89ip代理爬取 """class IPSipder(object):def __init__(self):self.u…

【损失函数】Quantile Loss 分位数损失

1、介绍 Quantile Loss&#xff08;分位数损失&#xff09;是用于回归问题的一种损失函数&#xff0c;它允许我们对不同分位数的预测误差赋予不同的权重。这对于处理不同置信水平的预测非常有用&#xff0c;例如在风险管理等领域。 当我们需要对区间预测而不单是点预测时 分位…

ArkTS语言应用开发入门指南与简单案例解析

文章目录 前言创建项目及其介绍简单案例学习本文总结问答回顾-学习前言 在前几节课中,我们已经了解了ArkTS语言的特点以及其基本语法。现在,我们将正式利用ArkTS来进行应用开发。本节课将通过一个快速入门案例,让大家熟悉开发工具的用法,并介绍UI的基础概念。 创建项目及…
最新文章