关于Java的三天捕鱼两天筛网问题

题目:国有句俗语叫“三天打鱼两天晒网”。某人从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("查询结束!");
		
		}
	

}

	}
}

程序运行结果为:
程序运行结果

程序设计方法学第一次作业

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值