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

这个问题可以分为三步解决:①计算从2010年1月至指定日期之间间隔的天数;

②“打渔”和“晒网”的最小周期为5天,所以用计算出的天数除以5;

③根据余数判断他是在“打渔”还是在“晒网”  ,若余数为0、1、2则他在打渔,否则在晒网

具体实现:首先,用字符输入缓冲流(BufferedReader)从文件读入数据;其次,用SimpleDateFormat类来处理日期,包括解析日期,判断日期是否合理(关闭日期自动转换即setLenient(false)),由数据格式或不合理日期(比如13月,或者2月30号)引起的程序异常,不要直接抛出,catch起来作为一个结果(输入信息有误)输出;然后,对数据进行计算处理,用getTime()方法得到1970年1月1日8:00到两个日期的毫秒数后相减再除以一天的毫秒数,得到两个日期的相隔天数,要注意一点,当指定日期在2010年1月1日之前时,也就是说还没有开始“三天打鱼两天晒网”活动,这种情况也可以当做信息输入错误来处理;最后,用字符输出缓冲流(BufferedWriter)输出结果到指定文件。

程序代码(含注释):

/*** @Package: com.cyh.fishing * @author: cyh   * @date: 2018年8月29日 下午7:33:58*/
package com.cyh.fishing;
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.text.SimpleDateFormat;
import java.util.Date;
/*** @ClassName: fishing* @Description: 解决"三天打渔两天晒网"问题* @author: cyh* @date: 2018年8月29日 下午7:34:26*/
public class Fishing {/*** @Fields beginDate : 开始日期*/Date beginDate;/*** @Fields endDate : 终止日期*/Date endDate;/*** @Title: precess* @Description: 对数据进行计算处理并返回打印信息* @return String* @author cyh* @date 2018年8月29日 下午8:25:15*/public String precess() {int days; // 开始日期与终止日期之间相隔的天数days = (int) ((endDate.getTime() - beginDate.getTime()) / (1000 * 60 * 60 * 24)); // 计算相隔的天数if (days < 0) { // 终止日期在开始日期之前,相隔天数为负return "输入信息有误!";}switch (days % 5) { // 打渔晒网一个周期为5天,利用间隔天数除以5判断打渔还是晒网case 0:case 1:case 2:System.out.println("days:" + days); // 在控制台输出间隔天数便于调试(可删除)System.out.println("输出结果:打渔!"); // 在控制台输出结果(可删除)return "打渔!";default:System.out.println("days:" + days); // 在控制台输出间隔天数便于调试(可删除)System.out.println("输出结果:晒网!"); // 在控制台输出结果(可删除)return "晒网!";}}/*** @Title: ioput* @Description: 进行文件输入输出操作* @author cyh* @date 2018年8月29日 下午10:17:51*/public void ioput() {String input; // 接收从文件读入的数据FileReader reader; // 创建字符输入流对象FileWriter writer; // 创建字符输出流对象BufferedReader br; // 创建字符缓冲输入流对象BufferedWriter bw; // 创建字符缓冲输出流对象SimpleDateFormat sdf; // 创建SimpleDateFormat对象来处理要输入的日期sdf = new SimpleDateFormat("yyyyMMdd"); // 初始化SimpleDateFormat对象并设置解析日期格式sdf.setLenient(false); // 给setLenient方法传入false,禁止解析日期时将不合法的日期自动计算转换为合法的日期try {reader = new FileReader("in.txt"); // 路径默认在工程文件夹下,若想指定路径,可改用绝对路径br = new BufferedReader(reader);writer = new FileWriter("out.txt");bw = new BufferedWriter(writer);while ((input = br.readLine()) != null) { // 一次读取文件中的一行数据赋给input,为空时结束循环System.out.println("读入的数据为:" + input); // 在控制台输出从文件读入的数据便于调试(可删除)try {beginDate = sdf.parse("20100101"); // 用parse方法直接解析出日期endDate = sdf.parse(input);} catch (ParseException e) { // 若输入的信息有误,则无法解析,打印错误信息System.out.println("输出结果:输入信息有误!");bw.write("输入信息有误!");bw.newLine();continue; // 打印完错误信息后,跳出本次循环,进入下次循环,避免执行下面的操作打印错误的结果}bw.write(precess()); // 在文件里输出precess()方法返回的结果bw.newLine(); // 换行}br.close(); // 关闭流通道bw.close();} catch (IOException e) {System.out.println("IO异常!");}}/*** @Title: main* @Description: 主方法(程序入口)* @param args void* @author cyh* @date 2018年8月29日 下午7:37:35*/public static void main(String[] args) {Fishing fish = new Fishing();fish.ioput();}
}

输入的数据(in.txt)和输出的结果(out.txt):

用java解决三天打渔两天晒网问题相关推荐

  1. 【练习题+1】某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网。

    刚刚开始学习,在题库里面抽到这一题. 某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网. 一个男孩工作3天,而请假2天.如果他在1990 ...

  2. 三天打渔两天晒网问题(python)

    三天打渔两天晒网问题其实很简单 和之前一周工作五天休息两天的思路是一样的 只要判断i除以5取的余数大于3还是小于3就可以了 大于等于3就说明休息天到了 代码实现: #DayDayUp.py #数学运算 ...

  3. JAVA语言解决“三天打渔,两天晒网”问题

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

  4. C语言--PTA三天打渔两天晒网问题

    郭.王两位大侠同上终南山习武,两人最初的战力值均为100.王大侠骨骼清奇,天赋较高,每练功一天,战力增加2‰,郭大侠比较愚笨,每练功一天,战力增加1‰.如果休假一天不练,两人的战力均减少1‰.相较于王 ...

  5. 用Java语言解决三天打渔,两天晒网问题

    问题描述: 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是& ...

  6. LeetCode 三天打渔两天晒网 剩下一天睡大觉

    学习要注意到细处,不是粗枝大叶的,这样可以逐步学习.摸索,找到客观规律 两数之和 难度 : Easy 题目链接: 两数之和 . import java.util.HashMap;/*** @autho ...

  7. C语言数组练习-三天打渔两天晒网

    要求:中国有句俗语叫"三天打鱼两天晒网",某人从1990年1月1日起开始"三天打鱼两天晒网",即工作三天,然后再休息两天.问这个人在以后的某一天中是在工作还是在 ...

  8. C语言:三天打渔两天晒网

    题目内容: 中国有句俗语叫"三天打鱼两天晒网",某人从1990年1月1日起开始"三天打鱼两天晒网",即工作三天,然后再休息两天.问这个人在以后的某一天中是在工作 ...

  9. 三天打渔两天晒网(python)

    #DayDayUp.py #数学运算的模块 def dayup(df):dayup = 1for i in range(365):if i % 5 >= 3:dayup = dayup*0.99 ...

最新文章

  1. 显示域用户登录的ip或计算机名,如何在使用PowerShell脚本或者VBS脚本,查看域内正在登录的域用户名、主机名和主机IP地址...
  2. python零基础怎么学-零基础python入门分析,如何做到一个月学会(深思极恐)
  3. word里实现在方框中打勾和打叉
  4. 总结day11 ----函数的学习(2)
  5. SQL Sever 基本命令案例
  6. Django内置的用户认证
  7. CSS中属性的值和单位
  8. 设置TextField内文字距左边框的距离
  9. 带有示例的Python date strftime()方法
  10. alinq mysql_ALinq 使用教程(移植 Linq to SQL 的利器)
  11. 用树莓派控制WS2812圣诞树灯饰
  12. Windows下启动Apache报错:ServerRoot must be a valid directory
  13. [主席树]HDOJ4417 Super Mario
  14. Unity3D 2018版本 Post Process 后期处理插件使用介绍
  15. 使用客户端工具SecureCRT连接linux
  16. VBA:单元格的引用
  17. 写好英语科技论文的诀窍: 主动迎合读者期望,预先回答专家可能质疑
  18. Learning to Count via Unbalanced Optimal Transport
  19. 腾讯短视频SDK代码层面上录制功能的实现,短视频APP开发第一步
  20. 黄金分割圆怎么画matlab,黄金分割线的画法和使用方法

热门文章

  1. 医学院的计算机与科学是医学类吗,2019年度中国医院和医学院校科技量值发布...
  2. k8s的nodeport端口范围provided port is not in the valid range. The range of valid ports is 30000-32767 解决
  3. JavaScript数据结构(3):单向链表与双向链表
  4. python web自动化demo阿里巴巴自动向商家发送消息
  5. 计算机辅助机床,计算机辅助机床造型设计.pdf
  6. 如何与亚马逊Amazon供应商平台集成?——EDI or API
  7. 下载附件下载附件下载附件
  8. Activity的启动流程详解
  9. python自学书籍-自学中医书籍推荐python进阶知乎
  10. PHP 大神的十大优良习惯