用java解决三天打渔两天晒网问题
中国有句俗语叫“三天打鱼两天晒网”。某人从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】某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网。
刚刚开始学习,在题库里面抽到这一题. 某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网. 一个男孩工作3天,而请假2天.如果他在1990 ...
- 三天打渔两天晒网问题(python)
三天打渔两天晒网问题其实很简单 和之前一周工作五天休息两天的思路是一样的 只要判断i除以5取的余数大于3还是小于3就可以了 大于等于3就说明休息天到了 代码实现: #DayDayUp.py #数学运算 ...
- JAVA语言解决“三天打渔,两天晒网”问题
一.问题描述: 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还 ...
- C语言--PTA三天打渔两天晒网问题
郭.王两位大侠同上终南山习武,两人最初的战力值均为100.王大侠骨骼清奇,天赋较高,每练功一天,战力增加2‰,郭大侠比较愚笨,每练功一天,战力增加1‰.如果休假一天不练,两人的战力均减少1‰.相较于王 ...
- 用Java语言解决三天打渔,两天晒网问题
问题描述: 中国有句俗语叫"三天打鱼两天晒网".某人从2010年1月1日起开始"三天打鱼两天晒网",问这个人在以后的某一天中是"打鱼"还是& ...
- LeetCode 三天打渔两天晒网 剩下一天睡大觉
学习要注意到细处,不是粗枝大叶的,这样可以逐步学习.摸索,找到客观规律 两数之和 难度 : Easy 题目链接: 两数之和 . import java.util.HashMap;/*** @autho ...
- C语言数组练习-三天打渔两天晒网
要求:中国有句俗语叫"三天打鱼两天晒网",某人从1990年1月1日起开始"三天打鱼两天晒网",即工作三天,然后再休息两天.问这个人在以后的某一天中是在工作还是在 ...
- C语言:三天打渔两天晒网
题目内容: 中国有句俗语叫"三天打鱼两天晒网",某人从1990年1月1日起开始"三天打鱼两天晒网",即工作三天,然后再休息两天.问这个人在以后的某一天中是在工作 ...
- 三天打渔两天晒网(python)
#DayDayUp.py #数学运算的模块 def dayup(df):dayup = 1for i in range(365):if i % 5 >= 3:dayup = dayup*0.99 ...
最新文章
- 显示域用户登录的ip或计算机名,如何在使用PowerShell脚本或者VBS脚本,查看域内正在登录的域用户名、主机名和主机IP地址...
- python零基础怎么学-零基础python入门分析,如何做到一个月学会(深思极恐)
- word里实现在方框中打勾和打叉
- 总结day11 ----函数的学习(2)
- SQL Sever 基本命令案例
- Django内置的用户认证
- CSS中属性的值和单位
- 设置TextField内文字距左边框的距离
- 带有示例的Python date strftime()方法
- alinq mysql_ALinq 使用教程(移植 Linq to SQL 的利器)
- 用树莓派控制WS2812圣诞树灯饰
- Windows下启动Apache报错:ServerRoot must be a valid directory
- [主席树]HDOJ4417 Super Mario
- Unity3D 2018版本 Post Process 后期处理插件使用介绍
- 使用客户端工具SecureCRT连接linux
- VBA:单元格的引用
- 写好英语科技论文的诀窍: 主动迎合读者期望,预先回答专家可能质疑
- Learning to Count via Unbalanced Optimal Transport
- 腾讯短视频SDK代码层面上录制功能的实现,短视频APP开发第一步
- 黄金分割圆怎么画matlab,黄金分割线的画法和使用方法
热门文章
- 医学院的计算机与科学是医学类吗,2019年度中国医院和医学院校科技量值发布...
- k8s的nodeport端口范围provided port is not in the valid range. The range of valid ports is 30000-32767 解决
- JavaScript数据结构(3):单向链表与双向链表
- python web自动化demo阿里巴巴自动向商家发送消息
- 计算机辅助机床,计算机辅助机床造型设计.pdf
- 如何与亚马逊Amazon供应商平台集成?——EDI or API
- 下载附件下载附件下载附件
- Activity的启动流程详解
- python自学书籍-自学中医书籍推荐python进阶知乎
- PHP 大神的十大优良习惯