用JAVA实现“三天打鱼,俩天晒网”
题目为
中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
问题分析
输入:日期
输出:在打鱼/晒网
分析:需要设计方法来将输入的日期转换并计算,并输出结果。
概要设计
//构造方法
public date(int year,int month,int day) {
this.year=year;
this.month=month;
this.day=day;
主要代码
//date.java
import java.util.Scanner;
public class date {
int year,month,day; //定义变量
public date(int year,int month,int day) { //构造方法
this.year=year;
this.month=month;
this.day=day;
}
public date() { //无参构造
}
public void difference(date date1,date date2) { //计算相差几天的算法
System.out.println("三天捕鱼,俩天晒网");
System.out.println("请输入要查询的日期");
System.out.println("(例如:20100102)");
Scanner sc=new Scanner(System.in); //运用Scanner类,获取输入的数字
int dates=sc.nextInt();
date2.year=(int)dates/10000; //将数字进行筛选选出年/月/日
date2.month=(int)((dates%10000)/100);
date2.day=(int)dates%100;
int num=0; //累加器
if(date2.year>=date1.year&&date2.month<13&&date2.day<32) //判断输入的日期是否合法
{
for(int i=date1.year;i<date2.year;i++) //根据年这个单位进行筛选,看看差几年,是否为闰年
{
int ayear=365;
if(i%4==0&&i%100!=0)
ayear=366;
if(i%400==0)
ayear=365;
num=num+ayear;
}
for(int month=1;month<date2.month;month++) //差几月,选择结构来求出每个月有几天
{
int days=0;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31; //大月
break;
case 4:
case 6:
case 9:
case 11:
days=30; //小月
break;
case 2: //2月特殊对待, 分平闰年
if(year%4==0&&year%100!=0)
days=29;
else
days=28;
if(year%400==0)
days=29;
break;
default:
break;
}
num=num+days;
}
num+=date2.day-date1.day; //算出差几日
if(num<0)
System.out.println("输入的日期错误,请重新输入"); //最后再次确定输出结果是否为正数,是否合法
else
System.out.println("查询的日期和2010年1月1日相差"+num+"天");
switch((num+1)%5) { //选择结构来判断是在捕鱼还是晒网
case 1:
case 2:
case 3:
System.out.println("这天在捕鱼");
System.out.println();
System.out.println();
break;
case 0:
case 4:
System.out.println("这天在晒网");
System.out.println();
System.out.println();
System.out.println();
break;
}
}
else
System.out.println("输入的日期错误");
}
}
//Main.java
public class Main{
public static void main(String arg[]) {
while(true) { //无限循环
date date1=new date();
date1.year=2010; // 对date1的值进行初始化
date1.month=01;
date1.day=01;
date date2=new date();
date1.difference(date1,date2);
}
}
}
初来乍到,多多关照 [抱拳]