问题描述:

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
基本要求:1.程序风格良好(使用自定义注释模板),提供友好的输入输出。
提高要求:1.输入数据的正确性验证。
2.使用文件进行数据测试。如将日期 20100101 20111214 等数据保存在in.txt文件中,程序读入in.dat文件进行判定,并将结果输出至out.txt文件。


问题分析:

根据题意可以将解题过程分为三步:
1.计算从2010年1月1日开始至指定日期共有多少天;
2.由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3.根据余数判断他是在“打渔”还是在“晒网”;若余数为1,2,3,则他是在“打渔”否则是在“晒网”。
其中要判断经历年份中是否有闰年,二月为29天,平年为28天。
判断是否为闰年的语句应为(year%40&&year%100!=0||year%4000)
写入以及输出文本时使用I/O流中的字符流,写入文本后使用str.substring()截取字符串后Integer,parseInt()转换为int数据类型后便可进行后续计算。


流程图:

1.代码如下:

package dayushaiwang;
import java.io.*;
public class zuoye {public static void main(String[] args) throws Exception{//创建一个字符输入缓冲流对象BufferedReader br = new BufferedReader (new FileReader("in.dat"));//创建数组存放读取到的字符char[] duqu = new char[1024];int len =0;String str1 =null;//使用循环读取文本while((len=br.read(duqu))!=-1){str1 =new String(duqu,0,len);}//创建一个字符存放截取到的字符String str2;//使用str.substring()截取字符,下同str2=str1.substring(0,4);//将读取到的字符型转换为int型方便后续计算,下同int year =Integer.parseInt(str2);str2=str1.substring(4,6);int month =Integer.parseInt(str2);str2=str1.substring(6,8);int day =Integer.parseInt(str2);System.out.println("读取到的日期为"+year+"年"+month+"月"+day+"日");//创建一个字符输出缓冲流对象BufferedWriter bw = new BufferedWriter (new FileWriter("out.txt"));//声明一个字符串变量strString str=null;//分别排除年月日输入错误的情况if(year<2010){System.out.println("你输入的年份错误。");return;}if(month>12) {System.out.println("你输入的月份错误。");return;}if(day>31){System.out.println("你输入的日期错误。");return;}//定义变量,其中s代表总日期,s1,s2,s3分别表示年月日的天数int s,s1=0,s2=0,s3;int yue;//定义新变量yue替代month在switch语句中进行减一操作yue=month;//将day的值赋给s3s3=day;//使用switch可以方便的加上每个月的日期数,比if else语句更加简洁switch(yue-1){case 12:s2+=31;case 11:s2+=30;case 10:s2+=31;case 9:s2+=30;case 8:s2+=31;case 7:s2+=31;case 6:s2+=30;case 5:s2+=31;case 4:s2+=30;case 3:s2+=31;case 2:if(year%4==0&&year%100!=0||year%400==0)s2+=29;                else s2+=28;case 1:s2+=31;}//最后一年的月份的所有日期全部加在了变量s2中//将s2与s3加在变量s中s=s2+s3;if(year==2010){//若为2010年,只需减去1月1日当天s=s-1;}else if(year>2010){for(int i=2011;i<year;i++){//判断闰年,闰年为366天if(i%4==0&&i%100!=0||i%400==0)s1+=366;else s1+=365;}s1=364+s1;s=s1+s2+s3;}if(s%5==1||s%5==2||s%5==0){str="在"+year+"年"+month+"月"+day+"日此人在打渔";//通过缓冲流对象写入文件bw.write(str);System.out.println("在"+year+"年"+month+"月"+day+"日此人在打渔");System.out.println("结果已写入文件!请前往out.txt查看!");}else {str="在"+year+"年"+month+"月"+day+"日此人在晒网";//通过缓冲流对象写入文件bw.write(str);System.out.println("在"+year+"年"+month+"月"+day+"日此人在晒网");System.out.println("结果已写入文件!请前往out.txt查看!");}//关闭流bw.close();br.close();
}
}

2.(1.)测试用例:2021年3月21日
结果:此人在打渔

(2).测试用例:2010年1月10日
结果:此人在晒网

3.总结:解决将从读取到的文件中的字符串转换为可计算的整型值时一开始的思路为将整个字符串全部转换为整型值后再分离出年月日,但对特殊数据可操作性小,后改为先截取字符串在转换为整型值。
整体设计步骤为先设计计算天数的算法确定运行正确后加入字符流来向文件中进行读取和写入操作。

用Java语言解决三天打渔,两天晒网问题相关推荐

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

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

  2. 用java解决三天打渔两天晒网问题

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

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

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

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

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

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

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

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

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

  7. java语言的三个版本是_Java是一个全面且功能强大的语言,可用于多种用途。Java有三个版本分别是:_学小易找答案...

    [单选题]电路如图所示,电路中包含的网孔个数为( ). [单选题]各点电位的高低是()的,而两点之间的电压值是()的. [单选题]研究发现,影响睡眠障碍的生物学因素与非生物学因素(). [单选题]1 ...

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

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

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

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

最新文章

  1. 熬夜写了一个小游戏,向SpaceX聊表敬意
  2. TCP/IP详解学习笔记(9)-TCP协议概述
  3. 开源软件5大常见问题及解决方法
  4. algid parse error, not a sequence错误
  5. C# foreach迭代器
  6. 打开eclipse出现JVM terminated.Exit Code=-1错误的解决办法
  7. python字符编码与转码
  8. .net页面生命周期
  9. java中else语句有错_java 菜鸟 If else有错误
  10. JAVA中的继承和覆盖
  11. 83、冗余网关配置实验之VRRP
  12. 编译OpenJDK:make[1]: *** 没有规则可制作目标“openjdk8/jdk/src/share/classes/java/applet/AppletContext.java”,
  13. php 公用方法,Laravel配置全局公共函数的方法步骤
  14. python里的正则表达式
  15. 《计算机网络教程》(微课版 第五版) 第二章 物理层 课后习题及答案
  16. WinAPI设置RGB背景色以及前景色
  17. 云锁卸载 linux,ubuntu下云锁卸载出错后无法重新安装的解决办法checking installation environment:...
  18. Linux常用命令——jwhois命令
  19. Quectel移远展锐平台5G模组RX500U/RG200U使用指南(四)-工作模式】
  20. 一个计算机爱好者眼里的隐私

热门文章

  1. 企业在做搜索推广时怎么选择竞价关键词
  2. Innosetup 添加数字签名
  3. U3d官方教程——2D UFO
  4. 现代修谱,如何看待支系单飞的现象?
  5. arm64版本的crossover
  6. Mysql中的MVCC
  7. 一套鼠标操控多台电脑 微软自带 mouse without boarders
  8. 计算机中丢失pmw.dll,我的电脑windows 7系统,开机提示tvtpwm_windows_hook.dll没法启动,请教高手...
  9. android opengl旋转,Android openGl学习笔记二,gl的旋转、位移、放大缩小
  10. 3、Narcissistic Number - 打印出所有水仙花数