三天打鱼两天晒网

*程序设计方法学
*作业一*2018.8.30
*三天打鱼两天晒网
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。

import java.util.Scanner;

/**
 * 三天打鱼两天晒网(作业一)
 * @author Ran
 *
 */

public class Homework1 {
    public static void main(String[] args){
        // TODO Auto-generated method stub  
            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();
            judge(isNumber(year,month,day));    //判断输入数据是否符合要求
            judge(getAllDays(year, month, day));  //计算距离输入日期多少天

     }

            private static void judge(boolean number) {
                // TODO Auto-generated method stub
            }

           //  判断输入数据是否符合要求
           public static  boolean isNumber(int year,int month,int day){
                     if (year <2010){   
                      System.out.println("输入数据不合法,请重新输入");
                    System.exit(0);  //报错并结束当前进程
                 }
                 if (month <=0||month >12){   
                      System.out.println("输入数据不合法,请重新输入");  
                    System.exit(0);  //报错并结束当前进程
                 }
                 if (day <=0||day >31){  
                      System.out.println("输入数据不合法,请重新输入");
                    System.exit(0);  //报错并结束当前进程
           } 
                return false;
} 

            // 判断是否是闰年
            public static boolean runNian(int year) {
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    return true;// 如果年能被4除尽且不能被100除尽,或能被400除尽
                 }               //则为闰年               
                return false;  //反之则不是闰年
            }

            // 计算距离输入日期多少天
            public static int getAllDays(int year, int month, int day) {  //输入目标日期
                int sum = 0;

            // 计算2010年到(目标年份-1)之间有多少天
                for (int i = 2010; i < year; i++) {
                    if (runNian(i)) {
                        sum += 366;  //若该年是闰年则加上366天
                    } else {
                        sum += 365;  //若该年不是闰年则加上365天
                    }
                }

                // 计算输入目标年份内多少天
                sum += getBeforeDays(year, month, day);
                return sum;
            }

            // 判断每月有几天
            public static int getDays(int year, int month) {
                int days = 0;
                switch (month) {
                case 1:
                case 3:
                case 5:
                case 7:  //当月份为1、3、5、7、8、10、12月时
                case 8:  //天数为31天
                case 10:
                case 12:  
                    days = 31;
                    break;
                case 4:
                case 6:  //当月份为4、6、9、11月时
                case 9:  //天数为30天
                case 11:
                    days = 30;
                    break;
                case 2:  //当月份为2月时
                    if (runNian(year)) {
                        days = 29;  //若为闰年则当月天数为29天
                    } else {
                        days = 28;  //反之不是闰年天数为28天
                    }
                    break;
                }

                return days;
            }

            // 计算目标年份内该日期之前共有多少天
            public static int getBeforeDays(int year, int month, int day) {
                int sum = 0;
                for (int i = 1; i < month; i++) {
                    sum += getDays(year, i);
                }
                return sum + day;

    }

            // 判断打鱼还是晒网
            public static void judge(int days) {
                int x = days % 5;  //用得到的总天数除以5取余
                if (x >= 1 && x <= 3) {  //若余数为1、2、3时则当天在打鱼
                    System.out.println("在打鱼");
                } else {  //反之余数为0、4时则当天在晒网
                    System.out.println("在晒网");
                }
     }      
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值