概述
一丶中国有句俗语叫“三天打鱼两天晒网”。某人从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除尽)
则 该年是闰年;
否则 不是闰年。
/*
* @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日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复