用Java解决“三天打渔两天晒网”的问题(1)

用Java解决“三天打渔两天晒网”的问题

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打渔两天晒网”,问这个人在以后的某一天中是“打渔”还是“晒网”。
基本要求:程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:
1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。
这个问题经过分析后,我先定义了一个天数总和 int days=0,定义每个月份所对应的天数int m[]={31,28,31,30,31,30,31,31,30,31,30,31},设置初始的年月日,再输入所要查询的日期数,判断年份是否为闰年 若为闰年,将二月的天数更改为29天,而后判断所输入的日期是否正确(若正确,计算此人这天是在打渔还是晒网,若错误提示错误信息并重新输入)。


程序流程图如下:
这里写图片描述

源代码为:

package WorkOne;
/**
 * @author Ray
 */

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        int days=0;
        int m[]={31,28,31,30,31,30,31,31,30,31,30,31};//定义每个月份所对应的天数

        int start_year=2010;//设置初始年份
        int start_month=1;//设置初始月份
        int start_day=1;//设置初始天数
        System.out.println("想知道某人何时打渔何时晒网吗?");
        while(true){
            Scanner input=new Scanner(System.in);
            System.out.println("请输入所要查询日期的年 月 日:(年月日之间用空格隔开)");
            //输入年 月  日
            int year=input.nextInt();
            int month=input.nextInt();
            int day=input.nextInt();
            if(year%4==0&&year%100!=0||year%400==0){
                m[1]=29;//判断年份是否为闰年 若为闰年 将二月的天数更改为29天
            }

            //判断所输入的日期是否正确(若正确 计算此日期的日程 若错误 提示信息 重新输入)
            if((year>=2010)&&(month>=1&&month<=12)&&(day>=1&&(day<=m[month-1]))){
                //累计年
                for(int i=2010;i<year;i++){
                    days=days+365;
                    if(year%4==0&&year%100!=0||year%400==0){
                        days++;//若为闰年 天数加一
                    }
                }   
                //累计月
                for(int i=0;i<month-1;i++){
                    days=days+m[i];
                }
                //累计日
                days=days+day;

                //计算打渔还是晒网
                if(days%5==1||days%5==2||days%5==3){
                    System.out.println("此人在这一天打渔。");
                }//余数为1,2,3 则为打渔
                else{
                    System.out.println("此人在这一天晒网。");
                }//余数为4,0 则为晒网
                break;

            }else{
                System.out.println("输入的日期错误!请重新输入!");
            }       
        }
    }
}

调试及测试截图
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

在这里我实现了基本功能,完成了提高要求里面的的输入数据的正确性验证,但因个人学习还不到位,在文件功能的完成上有些困难,文件方面功能未能完全实现,在这里就先不写出,但我还会继续学习,下次更好地完成它的功能,希望各位能够督促我并一起学习。

猜你喜欢

转载自blog.csdn.net/WendyRay/article/details/82192280