用Java解决:三天打鱼两天晒网问题

用Java解决:三天打鱼两天晒网问题

Welocome to Xiang’s world~

兄弟姐妹们!如果在翻看过程中发现错误,请纠正博主哦~

在这里插入图片描述

题目♥

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java语言实现程序解决问题。

分析♥

① 计算从2010年1月1日开始至指定日期共有多少天;(公式:总天数=整年总天数+输入年之后天数)
② “打鱼”和“晒网”的周期5天,所以要将计算出的天数取余5;(小学知识哦~)
③ 再根据余数判断他是在“打鱼”还是在“晒网”;
若{余数为1,2,3,则他是在“打鱼”}
否则{在“晒网”}

敲黑板!注意事项♥

① 用户输入的年月日是否满足规范呢?
② 闰年怎么计算呢?
③ 用户输入的年份距离2010年1月1日有多少个闰年?
④ 用户输入的年份是否为闰年?用户输入当年月份是否含有满2月?有的话是29还是28呢?

代码♥

在这里插入图片描述

package fish1;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        /**
        * Description: <br/>
        * @author: xiang<br/>
        * @date: 2021/3/21 22:25<br/>
        * @param:[args]<br/>
        * @return:void
        */
        //输入年,月,日
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入年:");
        int year = scanner.nextInt();
        System.out.println("输入月:");
        int month = scanner.nextInt();
        System.out.println("输入日:");
        int day = scanner.nextInt();

        if (validate(year, month, day)) {
            System.out.println("校验成功");
            judge(year, month, day);
        } else {
            System.out.println("校验失败");
        }

    }

    public static boolean validate(int year, int month, int day) {
        /**
        * Description: <br/>
        * @author: xaing<br/>
        * @date: 2021/3/21 22:26<br/>
        * @param:[year, month, day]<br/>
        * @return:boolean
        */
        //判断输入的年,月,日是否符合常理
        if ((year > 2009) && (month > 0 && month < 13) && (day > 0 && day < 32)) {
        //判断平月格式是否正确
            if (month == 4 || month == 6 || month == 9 || month == 11) {
                if (day > 30) {
                    return false;
                }
            } else if (month == 2) {
                if(year%4==0 && year%100!=0 || year%400==0){
                    if(day>=30){
                        return false;
                    }
                }else{
                    if(day>=29){
                        return false;
                    }
                }
            }
        } else {
            return false;
        }
        return true;
    }


    public static void judge(int year, int month, int day) {
        /**
        * Description: <br/>
        * @author: xiang<br/>
        * @date: 2021/3/21 22:26<br/>
        * @param:[year, month, day]<br/>
        * @return:void
        */
        int x = year - 2010;//判断用户输入的年份与2010的年份差
        int n = 0;//k为用户输入的年份与2010年之间闰年总数
        int beforeTotal = 0;
        //判断用户输入的年份与2010年之间有多少个闰年
        for (int i = 0; i < x; i++) {
            if (i%4==0 && i%100!=0 || i%400==0) {
                n++;
            }
        }
        beforeTotal = (365 * x + (n));
        System.out.println(+year + "与2010年之间有" + n + "个闰年");
        System.out.println(+year + "距离2010年有" + beforeTotal + "天");


        //输入年后有多天

        int afterTotal = 0;

        //判断用户输入的月份有多少满月(31天)
        int m = 0;//m为用户输入年份与用户输入年1月之间的满月数
        int pingYueCount = 0;
        switch (month) {
            case 1:
                break;
            case 2:
                m=1;
                break;
            case 3:
                m = 1;
                break;
            case 4:
                m=2;
                break;
            case 5:
                m = 2;
                break;
            case 6:
                m=3;
                break;
            case 7:
                m = 3;
                break;
            case 8:
                m = 4;
                break;
            case 9:
                m=5;
                break;
            case 10:
                m = 5;
                break;
            case 11:
                m=6;
                break;
            case 12:
                m = 6;
                break;
        }
        System.out.println(+year + "有" + (m) + "个满月数");
        //判断用户输入月份是否含有2月特殊月
        if (month > 1) {
            System.out.println("含有2月");
            if(month==2){
                pingYueCount = (month - m-1);
            }else{
                pingYueCount = (month - m - 1-1);
            }

            System.out.println("平月有:" + pingYueCount + "个");
        } else {
            System.out.println("不含有2月!");
            System.out.println("没有平月");
        }
        //判断当年是否为闰年
        if (year%4==0 && year%100!=0 || year%400==0) {
            System.out.println("该年为闰年");
            if(month>1){
                afterTotal = m * 31 + pingYueCount * 30 + 29+day;
                System.out.println("该年距离1月1日有:" + afterTotal + "天");
            }else{
                afterTotal = m * 31 + pingYueCount * 30 +day;
                System.out.println("该年距离1月1日有:" + afterTotal + "天");
            }
        } else {
            System.out.println("该年为平年");
            if(month>1){
                if (month==2){
                    afterTotal = 31+day;
                }else{
                    afterTotal = m * 31 + pingYueCount * 30+28+day;
                }
                System.out.println("该年距离1月1日有:" + afterTotal + "天");
            }else{
                afterTotal = m * 31 + pingYueCount * 30+day;
                System.out.println("该年距离1月1日有:" + afterTotal + "天");
            }
        }
        int total = afterTotal + beforeTotal;
        System.out.println("一共有:" + total + "天");
        //打鱼晒网
        if(total%5>0 && total%5<4){
            System.out.println("该天为打渔");
        }else{
            System.out.println("该天为晒网");
        }
    }
}


测试♥

输入年格式不正确(月,日同理)
在这里插入图片描述
输入闰年2月日期不对
在这里插入图片描述
输入闰年试试~
那就浪漫情人节吧,吼吼~
在这里插入图片描述

总结♥

闰年的判断方式哦~:year%4==0 && year%100!=0 || year%400==0
这个算法题分了三部分:Main,validate,judge
附上流程图再整理一遍思路吧~

①主方法:
在这里插入图片描述
②校验
在这里插入图片描述
③judge:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值