题目:中国有句俗语叫“三天打鱼两天晒网”。某人从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();
}
}
本文介绍了一个使用Java实现的日期计算器程序,该程序能够根据中国俗语“三天打鱼两天晒网”的规律,判断任意给定日期是‘打鱼’还是‘晒网’的日子。程序具备日期验证、计算间隔天数等功能。
1703

被折叠的 条评论
为什么被折叠?



