打鱼晒网

问题描述:

  中国有句俗语叫“三天打鱼两天晒网”。假如某人从1999年9月9日起开始“三天打鱼两天晒网”,问这个人在以后的任意一天是”打鱼“还是”晒网“?

问题分析:

  根据题意可以将题目过程拆分:

  1) 计算从1999年9月9日开始至指定日期共有多少天。

  2) 由于”打鱼“和”晒网“的周期为5天,所以将计算出的天数用5去除。根据余数判断他是在”打鱼“还是”晒网“。

  在这个步骤中,第一步是关键。计算天数,要判断年份中是否有闰年,闰年二月29天,平年二月28天。

 

import java.util.Scanner;


/**
 * 打鱼还是晒网
 *
 */
public class FishOrNet {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入1999年9月9日之后的日期:");
		System.out.print("年:");
		int year = sc.nextInt();
		System.out.print("月:");
		int month = sc.nextInt();
		System.out.print("日:");
		int day = sc.nextInt();
		//1. 计算输入日期距离1999年9月9日的天数
		int zhongtian = getDays(year, month, day);
		System.out.println("输入日期距离1999年9月9日的天数:" + zhongtian);
		//2. 判断打鱼还是筛网
		if (zhongtian % 5 == 1 || zhongtian % 5 == 2 || zhongtian % 5 == 3) {
			System.out.println("打鱼");
		} else {
			System.out.println("晒网");
		}
	}
	
	/**
	 * 计算从1999年9月9日开始至指定日期共有多少天
	 * 	思路:1. 输入年份的前一年  到 1999.9.9共有多少天
	 * 			1.1 输入年份是1999年
	 * 			1.2 不是1999年:计算1999年总共多少天,然后循环其他年份
	 * 		2. 计算输入这一年 有多少天
	 * 			2.1 定义数组存储每个月的天数
	 * @param year 年
	 * @param month 月
	 * @param day 日
	 * @return 返回总天数
	 */
	public static int getDays(int year, int month, int day){
		//存储总天数
		int sumDays = 0;
		//计算总天数
		if(year == 1999){//输入年份是1999年
			switch (month) {
			case 9:
				sumDays = day - 8;
			case 10:
				sumDays = 22 + day;
			case 11:
				sumDays = 22 + 31 + day;
			case 12:
				sumDays = 22 + 31 + 30 + day;
			}
		}else if(year > 1999){//输入年份是1999年之后
			sumDays = 114;//1999年的天数:22+31+30+31
			//循环从2000年开始,到输入年份的前一年,所以结束条件是 小于输入年份;最后一年单独算
			for(int i = 2000; i < year; i++){
				if(runNian(year)){//调用判断闰年的方法,如果是闰年,总天数+366
					sumDays = sumDays + 366;
				}else{//如果是平年,总天数+365
					sumDays = sumDays + 365;
				}
			}
			//用数据存储每个月的天数
			int run[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//闰年
			int ping[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//平年
			//计算输入这一年的天数,从一月开始循环,结束条件是输入月份;注意:输入月份不能计算,所以结束条件 小于输入月份
			for(int i = 1; i < month; i++){
				if(runNian(year)){//调用判断闰年的方法,如果是闰年,读取数组run
					sumDays = sumDays + run[i-1];//月份从1开始,但是数组下标从0开始,所以-1
				}else{//如果是平年,读取数组ping
					sumDays = sumDays + ping[i-1];
				}
			}
			//讲输入这一个月的天数加到总天数里边
			sumDays = sumDays + day;
		}else{
			System.out.println("请输入1999年9月9日之后的日期!!!");
		}
		return sumDays;
	}
	
	/**
	 * 判断是否闰年
	 * @return true闰年;false平年
	 */
	public static boolean runNian(int year){
		if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
			return true;
		}
		return false;
	}

}

 

  

 

posted @ 2017-02-21 16:43  金鱼饭饭  阅读(419)  评论(0编辑  收藏  举报