我是靠谱客的博主 虚拟导师,这篇文章主要介绍中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。,现在分享给大家,希望可以做个参考。

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

*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从2010年1月1日与指定日期相差多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为0,1,2,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。
求从2010年1月1日与指定日期相差多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则 该年是闰年;
否则 不是闰年。

这里写图片描述


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* * @author 徐於敏 * 三天打渔,两天晒网问题 */ import java.util.Scanner; import java.io.*; public class Week1 { public static void main(String[] args) throws Exception { //创建一个文件字节输出流 FileOutputStream fos = new FileOutputStream("D:\JAVA程序\homework\out.txt"); String result; /* * 从键盘中输入年月日 */ Scanner n=new Scanner(System.in); System.out.println("请输入年:"); int year=n.nextInt(); System.out.println("请输入月份:"); int month=n.nextInt(); System.out.println("请输入日:"); int day=n.nextInt(); int sum=0;//记录相差的天数 int sum1=0;//记录输入的日期在初始年过了多少天 switch(month-1) { case 11: sum1+=30; case 10: sum1+=31; case 9: sum1+=30; case 8: sum1+=31; case 7: sum1+=31; case 6: sum1+=30; case 5: sum1+=31; case 4: sum1+=30; case 3: sum1+=31; case 2://判断是否为闰年 if(year%4==0&&year%100!=0||year%400==0) sum1+=29; else sum1+=28; case 1: sum1+=31; } sum1+=day;//在2010年1月1日到指定日期的总天数 if(year<2010||month>12||day>31) {//判断输入的年月日是否正确 System.out.println("输入的日期有误"); return; } else if(year==2010) {//输入的年份是同一年 sum=sum1-1;//减去1月1日后,得到的天数 }else if(year>2010) { int sum2=364;//计算2010这一年除了1月1日后还剩几天,2010年为平年,还剩364天 int sum3=0;//定义一个变量用来计算所输入的年份与2010年之间有几年 for(int i=2011;i<year;i++) {//计算输入年份与初始年份之间间隔年的天数,若没有间隔,则不执行 if(i%4==0&&i%100!=0||i%400==0) {//判断是否为闰年,是+366天 sum3+=366; }else {//否则为平年,+365天 sum3+=365; } } sum=sum1+sum2+sum3;//计算后相差的总天数 } System.out.println("2010年1月1日与"+year+"年"+month+"月"+day+"日"+"相差的天数是:"+sum); /* * 若两个日期之间相差天数对5取余,余数为0,1,2为打渔,否则为晒网 */ if(sum%5==0||sum%5==1||sum%5==2) { result = year+"年"+month+"月"+day+"日"+"某人在打渔"; System.out.println(result+":已经写入文件"); fos.write(result.getBytes());//将结果写入out.txt } else { result = year+"年"+month+"月"+day+"日"+"某人在晒网"; fos.write(result.getBytes()); System.out.println(result+":已经写入文件");//将结果写入out.txt } fos.close();//关闭流 n.close(); } }

运行截图:
1.成功运行
运行展示
这里写图片描述
2.错误运行
输入错误的月份报错

总结:本次作业是“三天打鱼两天晒网”,主要实现了2010年1月1日开始打渔,到输入的日期,该人是在打鱼还是晒网的功能,并识别错误日期的输入,输出两者相差的天数。
本次作业的主要问题就是闰年的判断和相差天数的计算,解决了这两个问题,整个程序就很清晰了。我在程序上添加了输入数据的正确性判断的功能,以及将程序的结果输出到out.txt中。程序写的过程中还是有许多小错误的,例如循环的条件老是出错,没有处理异常,但最终还是一一解决了,这时,我体会到了自己写出一个正确的程序的喜悦。遗憾的是,还有一部分功能没有实现,但我相信以后经过自己的学习,能够写出更好的程序。。

最后

以上就是虚拟导师最近收集整理的关于中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。的全部内容,更多相关中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部