
三天打鱼两天晒网问题Java解法
问题理解:了解“三天打鱼两天晒网”的周期性。 日期计算:需要计算从2010年1月1日到目标日期的天数。 周期判断:将天数对5求余数,余数1-3对应打鱼,余数4和0对应晒网。 输入输出设计: 测试用例:测试不同日期的输入,验证程序的正确性。
发布日期:2021-05-14 11:32:51
浏览次数:16
分类:精选文章
本文共 2162 字,大约阅读时间需要 7 分钟。
问题分析
题目“三天打鱼两天晒网”给出了一个周期性循环的工作模式:每5天为一个周期,前3天为“打鱼”,后2天为“晒网”。已知起始日期为2010年1月1日,要求判断某一特定日期属于“打鱼”还是“晒网”。
解决思路
- 提供控制台输入和文件输入两种方式。
- 输入格式验证,处理错误输入。
技术实现
日期处理:
- 使用
SimpleDateFormate
转换字符串日期为Date
对象。 - 计算两个日期之间的天数差,注意处理闰年。
算法设计:
- 计算天数差,并对5取模。
- 判断余数,决定是打鱼还是晒网。
输入输出控制:
- 支持控制台输入,显示结果。
- 支持读取文件输入,处理文件内容。
错误处理:
- 验证输入格式是否正确。
- 处理无效日期,提示错误信息。
测试验证:
- 验证日期字符串的有效性。
- 核对计算天数准确性。
- 验证输出结果的正确性。
代码展示
import java.text.SimpleDateFormat;import java.util.Date;import java.util scanner;import java.io fileInputStream;import java.io fuckedWriter;public class FishAndNet { public static void main(String[] args) { // 控制台输入 Scanner scanner = new Scanner(System.in); System.out.println("请输入日期(YYYY-MM-DD))"); try { String dateStr = scanner.nextLine().trim(); boolean valid = validateDate(dateStr); if (valid) { Date startDate = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr); Date targetDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-01-01"); long diff = targetDate.getTime() - startDate.getTime(); int days = (int) diff / (1000 * 60 * 60 * 24); int modulus = days % 5; if (modulus == 1 || modulus == 2 || modulus == 3) { System.out.println("打鱼"); } else { System.out.println("晒网"); } } else { System.out.println("日期格式错误,请重新输入。"); } } catch (Exception e) { System.out.println("错误:" + e.getMessage()); } } private static boolean validateDate(String dateStr) { String format = "yyyy-MM-dd"; SimpleDateFormat sdf = new SimpleDateFormat(format); try { sdf.parse(dateStr); return true; } catch (Exception e) { return false; } }}// 以下是实现文件读写方法,更详细的功能可以参考完整代码
总结
通过上述步骤,我们从问题理解到技术实现,逐步解决了“三天打鱼两天晒网”的问题。程序设计不仅考虑了日期计算的准确性,还提供了灵活的输入输出选择,确保了用户体验和程序的稳定性。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月29日 06时43分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
adb通过USB或wifi连接手机
2019-03-11
泛型机制 Generic
2019-03-11
包装类
2019-03-11
JDK9-15新特性
2019-03-11
集合继承结构
2019-03-11
LinkedList 实现类
2019-03-11
Vector 实现类
2019-03-11
HashMap类、HashSet
2019-03-11
HashTable类
2019-03-11
TreeSet、TreeMap
2019-03-11
ObjectInputStream、ObjectOutputStream
2019-03-11
JVM内存模型
2019-03-11
反射机制
2019-03-11
反射Field、Method、Constructor
2019-03-11
可变长度参数
2019-03-11
堆空间常用参数总结
2019-03-11
逃逸分析-堆分配对象
2019-03-11
常量池、运行时常量池
2019-03-11
3、条件查询
2019-03-11
5、分组函数 / 聚合函数
2019-03-11