有俗语说,一位老者家住河边,打渔三天,晒网两天,问自2010年1月1日起,以后的某一天是打渔还是晒网。
首先,这个问题实现起来有三个重要的点需要注意
1.a年b月c日至2010年1月1日有多少天
2.计算出天数差与周期求余
3.余数是1,2,3,则打渔;余数是0,4,则晒网
流程图如下:
问题一:怎么求天数差呢?
说到天数,如果用户输入天数在2010年1月1日之前,也要有相应的处理方式,接下来一个小菜鸟的程序来了。
if(year < 0||month < 1||month >12){
System.out.println("请输入合法日期");
System.exit(0);
}else{
if(isLeapYear(year)&&month == 2){
Month_Days[month] = 29;
}
if(day == 0||day > Month_Days[month]){
System.out.println("请输入合法日期");
System.exit(0);
}
}
天数差的求解过程:
闰年、平年问题,闰年一年有366天,平年一年有365天,即闰年的2月有29天
1.年:某年-2010-1:算出整年的天数,其中要注意闰年
2.月:如果a年是闰年并且b月月数大于2,要多加一天
3.日:输入的日子c
公式:天数差 = 年+月+日
小菜鸟的代码在下面呢
1.闰年的判断程序
/**
* @param: [year]
* @return: boolean
* @Description:判断year是否是闰年
*/
public boolean isLeapYear(int year){
if(year%400 == 0||(year%4 == 0&&year%100 != 0)){
return true;
}else{
return false;
}
}
2.获取天数差的代码:
/**
* @param: []
* @return: int
* @Description:获取输入日期至2010年1月1日的天数差
*/
public int getAllDays(){
int days = 0;
int startYear = 2010;
if(year > startYear){
for(;startYear<year;startYear++){
if(isLeapYear(startYear)){
days += 366;
}else{
days += 365;
}
}
}
for(int i=1;i<month;i++) {
days += Month_Days[i];
if(isLeapYear(year)&&month > 2){
days++;
}
}
days += day;
return days;
}
问题二:得到了天数差,接下来就是打渔Or晒网判断啦。。。
天数差%5 = 1 或 2 或 3--------->打渔
天数差%5 = 0 或 4---------------->晒网
接下来就是代码实现了
这段代码中有在out.txt中显示的方法哦
/**
* @param: []
* @return: void
* @Description:判断这天是打渔Or晒网,并在out.txt中显示
*/
public void isFishing() throws IOException{
FileWriter writer = new FileWriter("out.txt");
BufferedWriter bw = new BufferedWriter(writer);
int result = getAllDays() % 5;
if (result == 0 || result == 4) {
System.out.println("晒网");
bw.write("晒网");
} else {
System.out.println("打渔");
bw.write("打渔");
}
bw.close();
}
问题三:从in.txt中读取日期的程序去哪了?
我找找哈,嗒嗒嗒,在这里:
从in.txt中读取,把字符型数据转换成整型数据
Integer.parseInt(String)的作用就是将String字符类型数据转换为Integer整型数据。
BufferedReader br = new BufferedReader(new FileReader("in.txt"));
String line = br.readLine();
year = Integer.parseInt(line.substring(0, 4));
month = Integer.parseInt(line.substring(4, 6));
day = Integer.parseInt(line.substring(6, 8));
基本问题结束,放一个测试图
保存了一个合法的日期
显示结果:
但是,程序还是有一个问题,就是当你在in.txt中换行输入两个日期时,out.txt中只会显示第一个日期干的事情
为了这个问题查阅了一些代码,还是没有解决,下来我会继续学习,等下一次更博客时,这个问题会继续完善的。