“三天打鱼,两天晒网”------日期计算及判断和系统流程图

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:输入数据的正确性验证。

1、问题分析与算法设计
1)计算从2010年1月1日开始至指定日期共有多少天;
如何计算天数:假设日期为2018年10月10日
天数=2010年的天数+11-17年的整天数(平年365,闰年366天)
+2018年已经过得天数
注意:如果是同一年(输入日期过得天数-1即为所求天数)
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”

2、算法描述流程图
这里写图片描述

3、具体代码

package Dayu;

import java.util.Scanner;

public class Homework {
    public static void main(String[] args){
        Scanner s =new Scanner(System.in);
        //输入年份
        System.out.println("请输入年:");
        int y=s.nextInt();
        //判断输入的年份是否正确
        if(y<2010){
            System.out.println("输入年份有误");
            return;
        }

        //输入月份
        System.out.println("请输入月");
        int m=s.nextInt();
        //判断输入的月份是否正确
        if(m<0||m>12){
            System.out.println("输入月份有误");
            return;         
        }

        //输入日期
        System.out.println("请输入日");
        int d=s.nextInt();
        //根据输入的月份判断输入的日期是否正确
        switch(m){
        case 1:
            if(d<0||d>31){
                System.out.println("输入日期有误");
                return;
            }
            break;
        case 2:
            if((y%4==0&&y%100!=0||y%400==0)&&d<0||d>29){
                System.out.println("输入天数有误");
                return;
            }else if((y%4!=0&&y%100==0||y%400!=0)&&d<0||d>28){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 3:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 4:
            if(d<0||d>30){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 5:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 6:
            if(d<0||d>30){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 7:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 8:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 9:
            if(d<0||d>30){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 10:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 11:
            if(d<0||d>30){
                System.out.println("输入天数有误");
                return;
            }
            break;
        case 12:
            if(d<0||d>31){
                System.out.println("输入天数有误");
                return;
            }
            break;
        }
        int sum=0;//记录输入的这个日期至2010年1月1日总共过去多少天
        int sum1=0;//记录输入的这个日期在这一年已经过了多少天

        //使用switch、case语句记录每个月的天数并相加
        switch (m-1) {
        case 1:sum1+=31;

        case 2:if(y%4==0&&y%100!=0||y%400==0)
                sum1+=29;
               else
                sum1+=28;   
        case 3:sum1+=31;
        case 4:sum1+=30;
        case 5:sum1+=31;
        case 6:sum1+=30;
        case 7:sum1+=31;
        case 8:sum1+=31;
        case 9:sum1+=30;
        case 10:sum1+=31;
        case 11:sum1+=30;           
        }
        sum1+=d;//日期数

        //如果输入的年份为2010,则总的天数就等于sum1
        if(y==2010)
        {
             sum=sum1;  
        }else if(y>2010)
        {
            int sum2=365;//计算2010年有多少天
            int sum3=0;//计算相差的年份的整天数闰年366,平年365
            for(int i=2011;i<y;i++){
                if(i%4==0&&i%100!=0||i%400==0){
                    sum3+=366;                  
                }else{
                    sum3+=365;
                }
            }
            //总的天数=2010年的天数+过去年的整天数+输入日期年份73已经过得天数
            sum=sum1+sum2+sum3;
        }
            System.out.println(y+"年"+m+"月"+d+"日至2010年1月1日的天数是:"+sum);

        if(sum%5==1||sum%5==2||sum%5==3)
        {
            System.out.println(y+"年"+m+"月"+d+"日在打鱼");
        }else{
            System.out.println(y+"年"+m+"月"+d+"日在晒网");
        }
    }
}

4、测试:
这里写图片描述
这里写图片描述

5、心得体会:
程序在判断日期是否正确以及累计天数的时候使用了switch、case语句,感觉比较烦锁,这个可以用数组方法int days[]={31,28,30……….}来验证和累计天数,这个后续上传。鉴于本人还是小菜鸟,代码不严谨,欢迎指教(嘻嘻嘻)。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值