中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

本文介绍了一个使用Java实现的日期计算器程序,该程序能够根据中国俗语“三天打鱼两天晒网”的规律,判断任意给定日期是‘打鱼’还是‘晒网’的日子。程序具备日期验证、计算间隔天数等功能。

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

语言:java 平台:eclipse
完成结果功能:1.可以自己写入若干日期数据到txt文件。
2.可以读入txt文件里面的日期数据。
3.可以判断输入日期是否符合要求。
4.可以计算间隔天数。
5.可以判断当天是打鱼或者是晒网。

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

代码:
package 三天打鱼两天晒网;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
import java.util.regex.Pattern;

public class FishorNet {
private int initialYear = 2010;
private int initialMonth = 1;
private int initialDay = 1;
private int year;
private int month;
private int day;
private int date;
private int[][] monthDays = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };

public boolean right(String str) {
    boolean right;
    Pattern pattern = Pattern.compile("[0-9]*");
    right = pattern.matcher(str).matches();
    if (right) {
        if (str.length() == 8) {
            String Y, M, D;
            int y, m, d;
            Y = str.substring(0, 4);
            y = Integer.parseInt(Y);
            M = str.substring(4, 6);
            m = Integer.parseInt(M);
            D = str.substring(6, 8);
            d = Integer.parseInt(D);
            if (y > 2010 && y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
                if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d <= 31)
                    ;
                else if (m == 2 && d <= 29)
                    ;
                else if (m<=12&&d <= 30)
                    ;
                else
                    right = false;
            } else if (y > 2010) {
                if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && d <= 31)
                    ;
                else if (m == 2 && d <= 28)
                    ;
                else if (m<=12&&d <= 30)
                    ;
                else
                    right = false;
            } else
                right = false;
        } else
            right = false;
    }
    return right;
}

public void change(String date1) {
    String Y, M, D;
    int y, m, d;
    Y = date1.substring(0, 4);
    y = Integer.parseInt(Y);
    M = date1.substring(4, 6);
    m = Integer.parseInt(M);
    D = date1.substring(6, 8);
    d = Integer.parseInt(D);
    year = y;
    month = m;
    day = d;
}

public int allDays() {
    int changeYear = initialYear;
    int days = 0;
    while (changeYear <= year) {
        // 计算2010到指定年前一年的天数
        if (changeYear < year) {
            if (changeYear % 4 == 0 && changeYear % 100 != 0 || changeYear % 400 == 0) {
                days += 366;
                changeYear++;
            } else {
                days += 365;
                changeYear++;
            }
        }
        // 计算指定年那年的天数
        else {
            if (changeYear % 4 == 0 && changeYear % 100 != 0 || changeYear % 400 == 0) {
                for (int m = 1; m <= month; m++) {
                    if (m < month)
                        days += monthDays[1][m - 1];
                    else
                        days += day;
                }
                changeYear++;
            } else {
                for (int m = 1; m <= month; m++) {
                    if (m < month)
                        days += monthDays[0][m - 1];
                    else
                        days += day;
                }
                changeYear++;
            }
        }
    }

    return days;
}

public static void main(String[] args) throws Exception {
    Scanner input = new Scanner(System.in);
    FileWriter writer = new FileWriter("1.txt");
    FishorNet fn = new FishorNet();
    String str;
    int i = 1;
    // 给txt里写入日期数据
    while (i <= 3) {
        System.out.println("请输入第" + i + "个日期");
        str = input.next();
        // 输入正确的数据
        if (fn.right(str)) {
            writer.write(str);
            writer.write("\r\n");
            i++;
        } else
            System.out.println("第" + i + "个日期输入有误请重新输入");
    }
    writer.close();
    // 从写入数据的txt文件里面读数据
    FileReader reader = new FileReader("1.txt");
    BufferedReader breader = new BufferedReader(reader);
    String str2;
    int days;
    FileWriter writer2 = new FileWriter("2.txt");
    while ((str2 = breader.readLine()) != null) {
        fn.change(str2);
        days = fn.allDays();// 计算两个日期时间间隔
        // 判断打鱼还是晒网
        if (days % 5 == 0 || days % 5 == 4) {
            writer2.write("在" + str2 + "这一天他在晒网");
            writer2.write("\r\n");
        } else {
            writer2.write("在" + str2 + "这一天他在打渔");
            writer2.write("\r\n");
        }
    }
    writer2.close();
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值