问题描述:
中国有句俗语叫“三天打鱼两天晒网”。假如某人从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; } }