三天打渔两天晒网

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

二、基本要求: 1.程序风格良好(使用自定义注释模板),提供友好的输入输出。

三、思路:

      *问题分析与算法设计

      根据题意可以将解题过程分为三步:

      1)计算从2010年1月1日开始至指定日期共有多少天;

      2)由于“打鱼"和“晒网"的周期为5天,所以将计算出的天数用5去除;

四、程序流程图:

五、代码:

/**
 * FileName:Judge.java
 * Description:中国有句俗语叫“三天打鱼两天晒网”,某人从2010年1月1日开始起“三天打鱼两天晒网”
 * 			         问这个人在以后的某一天中是“打鱼”,还是“晒网”
 * History:
 * 版本号	作者	 日期			简要操作以及相关介绍
 * 1.0	陈茜	2018-08-29	判断是打渔还是晒网的相关方法
 */
package exercise.judge.domain;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 测试目标日期是打渔还是晒网
 * @author ChenXi
 * @version 1.0
 * @see Jdk1.9 API
 * */
public class Judge {
/**
* 把日期字符串转成Date的方法
* @param source  要转换的日期字符串
* @param pattern 要转换的格式,这里必须和日期字符串的格式一样
* @return 解析后的日期对象
* @throws ParseException 如果格式不一致,将抛出解析异常
* */
	public static Date stringToDate(String source) throws ParseException{
			String pattern = "yyyy-MM-dd";//将字符串日期解析为Date类型的规则
			return new SimpleDateFormat(pattern).parse(source);
	}
/**
* 求两个日期的之间的天数
* @param ms测试日期到指定日期的毫秒数
* @param days测试日期到指定日期的天使
* @param num天数模5的值
* */
	public static long toDays(Date testDate,Date start) {
		return (testDate.getTime()-start.getTime())/1000/60/60/24;
	}
/**
 * 判断是打渔还是晒网
 * @param s 用来记录是打渔还是晒网
 * */
	public static String dayuOrShaiwang(long days) {
		long num = (days)%5;//得到余数
		String s = null;
		if (days>=0) {
			if (num==0||num==1||num==2) {
				s = "打渔";
			}
			if(num==3||num==4){
				s = "晒网";
			}
		}else {
			s = "日期不合法无法计算是打渔还是晒网";
		}
		return s;
	}
}
/**
 * FileName:JudgeTest.java
 * Description:中国有句俗语叫“三天打鱼两天晒网”,某人从2010年1月1日开始起“三天打鱼两天晒网”
 * 			         问这个人在以后的某一天中是“打鱼”,还是“晒网”
 * History:
 * 版本号	作者	 日期			简要操作以及相关介绍
 * 1.0	陈茜	2018-08-29	Judge的测试类
 */
package exercise.judge.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import exercise.judge.domain.Judge;
public class JudgeTest {
	public static void main(String[] args) throws IOException, ParseException {
		// TODO Auto-generated method stub
				//设置开始打渔的日期
				String start = "2010-01-01";
				BufferedReader bf = new BufferedReader(new FileReader("D:\\javaProgram\\exercise\\bin\\exercise\\judge\\testDate\\in.txt"));
				BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\javaProgram\\exercise\\bin\\exercise\\judge\\testDate\\out.txt",true));
				while(bf.ready()) {
				//读入第一个测试日期
				String test = bf.readLine();
				//把开始日期转化为Date类的对象
				Date startDate = Judge.stringToDate(start);
				//把测试日期转化为Date类的对象
				Date testDate = Judge.stringToDate(test);
				//计算测试日期与开始日期之间相隔的天数
				long days = Judge.toDays(testDate,startDate);
				//判断是打渔还是晒网
				String result = Judge.dayuOrShaiwang(days);
				//把结果写入out.txt文件
				bw.write(test+" "+result);
				//写入换行符
				bw.newLine();
				//刷新文件
				bw.flush();
				}
				//关闭输入流
				bf.close();
				//关闭输出流
				bw.close();
			}
	}

六、程序调过程:

Error1:Date类通过造方法设置时间的方法已经被弃用,java虚拟机在编译时不会保存,但是运行的时候会报错。

调试:开始时间在测试类设置,调用将字符串转换为Date对象的方法进行后续操作。运行结果不会报错,程序运行后的out.txt文件如图所示

反思:虽然程序运行通过但是有不足之处,写入的文件是很长很长一行,也不便于结果检验和阅读。

调试:写入换行符

猜你喜欢

转载自blog.csdn.net/AAAAA_Alice/article/details/82261546