`
大头K
  • 浏览: 186828 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java模拟题第九题---------计算天数

    博客分类:
  • java
阅读更多
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31

/**
 * @category 1949-10-1到输入日期之间一共有多少天
 * @author liucanwen
 * @2012年1月17日 20:59:27
 * 
 */
public class CountDays
{
	public static void main(String[] args)
	{
		try
		{
			System.out.print("请输入日期,格式如1949-10-2:");
			Scanner scanner = new Scanner(System.in);
			String date = scanner.nextLine();
			
			int year = Integer.parseInt(date.split("-")[0]);
			int month = Integer.parseInt(date.split("-")[1]);
			int day = Integer.parseInt(date.split("-")[2]);
			
			System.out.println(CountDays.countDays(year, month, day));
		}
		catch(Exception ex)
		{
			System.out.println("你输入日期的格式不正确。");
		}
	}
	/**
	 * @param year 输入的年
	 * @param month 输入的月
	 * @param day 输入的日
	 * @return 天数
	 */
	public static int countDays(int year, int month, int day)
	{
		//闰年、平年每月的天数
		int[][] days={{31,28,31,30,31,30,31,31,30,31,30,31},
					  {31,29,31,30,31,30,31,31,30,31,30,31}};
		
		//用index标识是什么年,index=0:平年,index=1:闰年	
		int index = year%4==0 && year%100!=0 || year%400==0? 1: 0;
		
		//判断输入日期是否正确
		if(year<1949 || month<1 || month>12 || day<1 || day>days[index][month-1])
			return -1;
		
		int[] years = {365, 366};
		
		//1949-10-1到1950-1-1剩余的天数
		int otherDays = 92;
		
		//用于统计日期离1949-10-1有多少天
		int count = 0;
		
		//如果输入year为1949
		if(1949 == year)
		{
			if(10 < month)
			{
				return -1;
			}
			if(10 == month)
			{
				count = day - 1;
			}
			else if(11 == month)
			{
				count = days[0][9] + day - 1;
			}
			else if(12 == month)
			{
				count = days[0][9] + days[0][10] + day - 1;
			}
		}
		//如果输入year大于1949
		else
		{
			//如果输入year等于1950
			if(year - 1949 == 1)
			{
				for(int i = 0; i < month - 1; i++)
				{
					count += days[index][i];
				}
				count = count + otherDays + day - 1;
			}
			//如果输入year大于1950
			else
			{
				for(int i = 1950; i < year; i++)
				{
					int index2 = i%4==0 && i%100!=0 || i%400==0? 1: 0;
					
					count += years[index2];
				}
				for(int i = 0; i < month - 1; i++)
				{
					count += days[index][i];
				}
				count = count + otherDays + day - 1;
			}
		}
		return count;
	}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    蓝桥杯java模拟试题

    【蓝桥杯Java模拟试题解析】 蓝桥杯Java模拟试题主要考察选手对Java语言的基本语法、逻辑思维以及算法应用的能力。题目通常包括代码填空和程序设计两大类型。下面我们逐一解析题目中的知识点。 1. 代码填空(满分3...

    蓝桥杯java模拟试题.pdf

    蓝桥杯 Java 模拟试题 本试卷包含两种题型:“代码填空”与“程序设计”。填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号...

    CSP-J模拟试题模拟题附答案

    根据给定的CSP-J模拟试题的信息,我们可以总结并详细解释一些重要的计算机科学与编程概念。这些知识点涉及了计算机基础知识、算法分析、数据结构、编程语言特性等方面。 ### 1. CSP-J/S 考试简介 - **CSP-J/S** 是...

    java基础50题

    ### Java基础50题知识点概览 #### 题目一:兔子数量增长问题 - **背景**:一对兔子从出生后第三个月开始每个月都会生一对兔子,假设兔子不死,求每个月兔子总数。 - **算法思路**:使用斐波那契数列(Fibonacci ...

    Java初学经典编程题

    ### Java初学经典编程题知识点解析 #### 题目一:兔子繁殖问题 - **题目描述**:一对兔子从出生后第三个月开始每个月都会生一对兔子,小兔子长大到第三个月后也会每月生一对兔子。假设兔子不会死亡,问每个月兔子的...

    java算法练习试题

    编写一个Java程序来计算兔子繁殖问题,可以使用循环或递归方法。 【程序 2】此题要求找出101到200之间的素数。素数是大于1且只有1和其本身两个正因子的自然数。判断素数的常用算法是埃拉托斯特尼筛法,但在这个问题...

    java基础练习50题

    - 数列计算:本题涉及一个典型的斐波那契数列问题,即每个月的兔子数量形成一个数列,从第三个月开始,每月的兔子总数等于前两个月兔子总数之和。 - 循环结构:可以使用`for`循环来模拟每个月兔子的数量变化。 - ...

    java经典编程题

    ### Java经典编程题知识点解析 #### 程序1:兔子繁殖问题 - **题目描述**:假设一对兔子从出生后第三个月起每个月都生一对兔子,而小兔子长到第三个月后每个月又生一对兔子,若兔子都不死亡,问每个月的兔子总数是...

    最新JAVA编程题全集

    ### JAVA编程题全集知识点详解 #### 知识点1:斐波那契数列与兔子繁殖问题 斐波那契数列是一个经典的数学概念,其中每个数字是前两个数字的和,通常从0和1开始。在题目描述中,兔子繁殖的问题实际上就是斐波那契...

    java基础练习题

    可以通过累加每个月的天数来计算。 ```java int year = 2023, month = 3, day = 15; int days = day; int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (year % 400 == 0 || (year % 4 =...

    50道经典Java逻辑编程题.docx

    ### 经典Java逻辑编程题知识点解析 #### 程序1:斐波那契数列与兔子繁殖问题 - **题目概述**:本题通过一个经典的数学问题——兔子繁殖问题,引出了斐波那契数列的概念。题目要求计算每个月兔子的总数。 - **...

    第三届“蓝桥杯”样题(模拟 JAVA 高职)

    ### 第三届“蓝桥杯”样题(模拟 JAVA 高职) #### 一、代码填空 **1. 打印0至9** 题目要求完成一个递归函数`f`,该函数从一个给定的`begin`值开始递增直至`end`值,并在每次递增过程中打印当前值。 ```java ...

    JAVA练习题50题

    14. **日期计算**(程序14):计算某一天是一年中的第几天,需要考虑闰年和平年,以及不同月份的天数,涉及到日期处理。 15. **排序**(程序15):将三个整数按从小到大的顺序输出,可以使用冒泡排序、插入排序或...

    java 经典习题.doc

    这些Java经典习题涵盖了多个基础编程概念,包括数学问题解决、算法设计、逻辑判断、循环结构、条件运算符、数组处理、字符串操作、输入输出、递归、数学计算等。以下是这些习题所涉及的知识点: 1. **斐波那契数列*...

    软件学院java上机题及答案

    ### 软件学院Java上机题解析及答案 #### 题目一:提取浮点数的整数部分和小数部分 **题目描述**: 编写一个Java程序,接收一个浮点数作为输入,然后输出该数的整数部分与小数部分。 **解析**: 1. **算法思路**:...

    java入门题目

    - **解析**:斐波那契数列是一个著名的数列,定义为:第一项和第二项均为1,后续每一项都是前两项的和。例如:1, 1, 2, 3, 5, 8, 13, 21, ...。在Java中实现这个数列,可以使用循环结构,如`for`循环或`while`循环。...

    java循环思维训练

    - **循环的应用场景**:在各种算法实现中,循环用于数据的遍历、数值计算(如求和、求平均等)、模式匹配、模拟实验等。 #### 二、理解循环的基础思维 - **基础思维**:循环的基础思维主要包括如何设置循环条件、...

    java测试代码

    #### Java面试题知识点概览 1. **斐波那契数列(Fibonacci Sequence)** - **描述**:题目要求生成斐波那契数列中的前几项。 - **知识点**: - 循环结构:`for` 或 `while` 循环用于生成数列。 - 数学运算:...

    蓝桥杯第九届c组Java题目及答案

    根据给定的信息,我们将对三个具体的蓝桥杯第九届C组Java题目进行详细的解析与解答。 ### 题目一:哪天返回 **题目描述**:小明被不明势力劫持并扔到了X星球站,为了返回地球,他需要攒够108元来购买船票。小明在...

Global site tag (gtag.js) - Google Analytics