一、问题描述:
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用JAVA语言实现程序解决问题。
二、问题分析:
只需要计算出输入的日期和2010年01月01日间隔多少天,计算出总天数对5取余,若余数是1,2,3,则在打渔,否则就是在晒网
** 算法分析:**
1.从文件中读书数据
2.判断输入日期是否合法
3.计算从2010年1月1日到读取的日期相差年月日
3.1经历的年数等于0,则直接进行月数计算
3.2若经历了三年或经历的年数对4求余余数为3,总天数累加366
3.3否则总天数累加365
4.计算经历的月份每个月的天数累加到总天数
5.把经历的天数加入到总天数
6.总天数对五取余
7.若余数是1,2,3则在打渔,否则就在晒网
流程图
三、代码实现
number.java
package com;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
public class Number {
/**
*
* 从文件中读取日期数据
* @param filename 需要读取的目标文件名
* @return
* @throws Exception
*/
public int read(String filename) throws Exception{
Scanner sc=new Scanner(new FileReader(filename));
while(sc.hasNextLine()){
sc.useDelimiter("\\|");
while(sc.hasNext()){
String str=sc.nextLine();
int number= Integer.parseInt(str);
System.out.println(number);
return number;
}
sc.close();
}return 0;
}
/**
* 用于对数据进行处理,判断日期正确性,以及距离2010年01月01日间隔多少天,判断是在打渔还是筛网
* @param number
* @return
*/
public String dealn(int number){
int sum=0; //间隔总天数
int month=((number-20100100)%10000)/100; //间隔月数
int day=(number-20100100)%100; //间隔天数
int year=(number-20100100)/10000; //间隔年数
//判断输入日期是否合法正确
if(((number%10000)/100)>12||((number%10000)/100)<0||(number%100)>31){
System.out.println(number+"输入日期错误!!!");
//输入日期正确对日期进行处理
}else {
if (year > 0) {
//计算间隔年数的天数
for(int i=1;i<=year;i++){
if(i==3||(i%4)==3){
sum=sum+366;
}else {
sum=sum+365;
}
}
}
//计算间隔月的天数和年的
for(int i=0;i<=month;i++){
if(i==1){
sum=sum+31;
}
if(i==2||i==4||i==6||i==7||i==9||i==11){
sum=sum+28;
}else if(i==3||i==5||i==8||i==10){
sum=sum+30;
}
}
//间隔总共天数
sum=sum+day;
System.out.println("距离20100101:"+sum+"天");
//求余,判断是在打渔还是筛网
if(sum%5<4&&sum%5>0){
String re=number+": 今天在打渔!";
System.out.println(re);
return re;
}else{
String re=number+": 今天在晒网!";
System.out.println(re);
return re;
}
}
return null;
}
/**
* 输出把判断结果到out.txt
* @param s
* @throws Exception
*/
public void write(String s) throws Exception{
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("out.txt"));
bufferedWriter.write(s);
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.close();
}
}
Main.java
package com;
public class Main {
public static void main(String[] args) throws Exception{
Number n=new Number();
int m= n.read("in.dat");
String result= n.dealn(m);
n.write(result);
}
}
四、调试
1.调试输入
2.调试计算总天数
3. 调试判断结果
4.调试读取“in.dat”文件
5.调试文件写入
6.调试日期合法检查
五、程序执行结果
总结
以上就是今天要讲的内容,本文简单介绍了对“三天打渔,两天晒网”问题的解决思路,希望对大家有帮助。