问题描述:
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
原因分析:
1.从in.txt文件中读书数据转化为int型
2.判断输入日期是否合法
3.计算从2010年1月1日到读取的日期相差年月日
4.把经历的天数转换为总天数
5.总天数对五取余,利用switch判断,0、1、2为打渔,3、4为晒网
解决方案:
import java.io.*;
public class fish {
public static void main(String[] args) throws IOException {
//定义in.txt和out.txt文件
File fr = new File("in.txt");
File fw = new File("out.txt");
Writer out = new FileWriter(fw);
BufferedWriter bufw = new BufferedWriter(out);
Reader in = new FileReader(fr);
BufferedReader bufr = new BufferedReader(in);
//定义一个字符数组,并提取in.txt中的文件内容
char[] a = new char[1024];
int len;
String str = null;
int number=0;
while ((len = bufr.read(a)) != -1) {
str = new String(a, 0, len);
number = Integer.parseInt(str);
}
String out1;
//计算距离20100101多少年,月,日
int sum = 0; //间隔总天数
int year = number/10000-2010; //间隔年数
int month = (number - (number/10000)*10000)/100; //间隔月数
int day = (number - 20100100) % 100; //间隔天数
//判断输入日期是否合法正确
if (((number % 10000) / 100) > 12 || ((number % 10000) / 100) < 0 || (number % 100) > 31||number/10000-2010<0) {
out1= "in.txt中文件有误!!!";
}
//输入日期正确对日期进行处理
else {
if (year > 0) {
//计算间隔年数的天数
for (int i = 1; i <= year; i++) {
if (i == 3 || (i % 4) == 3) {
sum = sum + 366;
}
else {
sum = sum + 365;
}
}
}
//计算间隔月的天数
//利用switch进行判断
for (int i = 1; i <= month; i++) {
switch (i){
case (2):
case (4):
case (6):
case (8):
case (9):
case (11):
sum=sum+31;break;
case (5):
case (7):
case (10):
case (12):
sum=sum+30;break;
case (3):
sum=sum+28;
default:
}
}
//间隔总共天数
sum = sum + day;
out1 =number+"距离20100101:" + sum + "天";
bufw.write (out1);
out1="\n";
bufw.write (out1);
//求余,判断是在打渔还是筛网
//利用switch进行判断
switch (sum%5)
{
case(0):
case(1):
case(2):
out1="在打鱼";
break;
case(3):
case(4):
out1="在晒网";
break;
default:
}
}
bufw.write (out1);
System.out.println ("写入文件成功");//输出提示语句,结果已经导入
bufr.close();
bufw.close();
}
}