题目:国有句俗语叫“三天打鱼两天晒网”。某人从2010年9月9日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
(1)由题目《三天打渔两天晒网》可知,周期为5。所以得知用总天数除以周期5,当余数为0,1,2时,该日在打渔,当余数为3,4时,该日此人在晒网;
(2)当要求2010年内某天在做某事,可以算出该天距离2010.9.9的总天数再求出答案
(3)当要求2011年及以后的某天,则可以先算出2010.9.9至2010.12.31的总天数加上2011年后到该日的天数,即可得出答案
package howworking;
public class Time {
public int data(int year,int month) {
int days=0;
int number;
switch(month) {
//用switch结构来判断每个月所对应的天数,好让后面程序进行循环计算
case 1:days=31;break;
case 2:
if(bl(year))
days=29;
else
days=28;break;
case 3:days=31;break;
case 4:days=30;break;
case 5:days=31;break;
case 6:days=30;break;
case 7:days=31;break;
case 8:days=31;break;
case 9:days=30;break;
case 10:days=31;break;
case 11:days=30;break;
case 12:days=31;break;
}
return days;
}
public boolean bl(int year) {
if((year%4==0&&year%100!=0)||year%400==0)
return true;
else
return false; //判断是否为闰年
}
public int result(int month,int days) {
int number=0;
if(month==9) {
number=days-9;
}
else {
for(int i=9;i<month;i++) {
number+=data(2010,i);
}
}
number=number+days-9;
return number; //返回2010年某月某日距离2010年9月9日的天数
}
public int data(int year) {
int number=0;
for(int i=1;i<year;i++) {
number+=data(year,i);
}
return number; //返回每年度过的天数
}
public int resultNineting() {
int number=0;
for(int i=1;i<=12;i++) {
number+=data(2010,i);
}
number-=9;
return number; //返回2010年总天数
}
//当年份>2010年时,距离2010年9月9日的天数
public int result(int year,int month,int days) {
int number=resultNineting();
if(year==2000) {
for(int i=1;i<month;i++) {
number+=data(2000,i);
}
number+=days;
}
else {
for(int i=2011;i<year;i++)
number+=data(i);
for(int i=1;i<month;i++)
number+=data(year,i);
number+=days;
}
return number; //返回2011年以后距离2010年9月9号的值
}
int year,month,days;
public void last(int number) {
if (number < 0) {
System.out.println("输入日期错误,只能输入2010年9月9日之后的日期!");
}
else if(number%5==0||number%5==1||number%5==1) {
System.out.println("距离2010年9月9日过去了"+number+ "天");
System.out.println(year+"年"+month+"月"+days+"日在打渔");
}
else {
System.out.println("距离2010年9月9日过去了"+number+ "天");
System.out.println(year+"年"+month+"月"+days+"日在 晒网");
}
}
public void getdate(int year,int month,int days) { //获取变量的值
this.year=year;
this.month=month;
this.days=days;
}
package howworking;
import java.util.Scanner;
public class RelaxingOrWorking {
static int year;
static int month;
static int days;
static int number;
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
Time time=new Time();
boolean q=true; //对年份判定循环的布尔变量
boolean p=true; //对查询任务是否继续循环的布尔变量
boolean m=true; //对月份判定循环的布尔变量
boolean n=true; //对天数判定循环的布尔变量
while(p) {
q=true;
m=true;
n=true;
while(q) {
System.out.println("请输入您想要查询的年份:");
year=reader.nextInt();
if(year<2010)
System.out.println("错误!请重新输入您想要查询的年份:");
else q=false;
}
while(m) {
System.out.println("请输入您想要查询的月份:");
month=reader.nextInt();
if(month<1||month>12)
System.out.println("错误!请重新输入您想要查询的月份:");
else m=false;
}
while(n) {
System.out.println("请输入您想要查询的天数:");
days=reader.nextInt();
if(days<1||days>31)
System.out.println("错误!请重新输入您想要查询的天数:");
else if(month==2) //当为二月时,判断是否为闰年
{
if(time.bl(year)) {
while(days>29){ //进行判定循环
System.out.println("该年为闰年,二月天数最多为29天!");
System.out.println("请重新输入天数!");
days=reader.nextInt();
if(days<=29) n=false;
}
}
else {
while(days>28){
System.out.println("该年为非闰年,二月天数最多为28天!");
System.out.println("请重新输入天数!");
days=reader.nextInt();
if(days<=28) n=false;
}
}
}
else n=false;
}
time.getdate(year,month,days); //获取变量的值
if(year==2010)
{
time.last(time.result(month,days)); //查询2010年内的工作状态
}
else
time.last(time.result(year, month,days));
//查询2010年以后的工作状态
System.out.println("是否继续查询?(Yes/No)");
char a=reader.next().charAt(0);
if(a=='Y') {
System.out.println("***********************");
p=true;
}
else
{p=false; //判断是否还要进行查询
System.out.println("查询结束!");
}
}
}
}
程序运行结果为:
程序设计方法学第一次作业