三天打鱼两天晒网源代码:
import java.util.Scanner;
/*
* Scanner类:输入流扫描器类
* 使用时要加:import java.util.Scanner;Scanner s=new Scanner(System.in);
* 方法:String nextInt():从控制台返回一个int数据类型
*/
public class zuoye1 {
public static void main(String args[]){
Scanner s=new Scanner(System.in);//输入年月日
System.out.println("请输入年:");
int y=s.nextInt();//Scanner类方法,返回Int值
System.out.println("请输入月:");
int m=s.nextInt();
System.out.println("请输入日:");
int d=s.nextInt();
int sum=0;//记录相差的天数
int sum1=0;//记录这个日期在这一年已经过了多少天(同一年的情况下)
switch(m-1){//计算本年已过月的总天数
case 11:sum1+=30;
case 10:sum1+=31;
case 9:sum1+=30;
case 8:sum1+=31;
case 7:sum1+=31;
case 6:sum1+=30;
case 5:sum1+=31;
case 4:sum1+=30;
case 3:sum1+=31;
case 2:if(y%4==0&&y%100!=0||y%400==0){//判断2月份为多少天
sum1+=29;//闰年
}
else{
sum1+=28;//非闰年
}
case 1:sum1+=31;
}
sum1+=d;//d为该查询日期本月已过的天数,计算本年总共过了多少天
if(y==2010){//计算2010年已经过去的天数
sum=sum1-1;//由于2010年1月1日已经过去了一天,所以要减去1
}
else if(y>2000){
int sum2=365;//计算了2010年1月1号在这一年还剩下多少天
int sum3=0;//计算相差的年份的总天数,闰年366,非闰年365
for(int i=2011;i<y;i++){
if (i%4==0&&i%100!=0||i%400==0){//闰年
sum3+=366;
}
else{
sum3+=365;//非闰年
}
}
sum=sum1+sum2+sum3;//相差的天数为第i年已经过的天数+2010年已经过的天数+中间相差年的总天数
}
System.out.println(y+"年"+m+"月"+d+"日和2010年1月1日相差的天数是:"+sum);
if(sum%5==0||sum%5==1||sum%5==2){//相差总天数除以5的余数为0,1,2时为打鱼
System.out.println(y+"年"+m+"月"+d+"日在打渔");
}
else{//其余日子在晒网
System.out.println(y+"年"+m+"月"+d+"日在晒网");
}
}
}
算法设计思路:
(1)计算从指定日期到2010年1月1日相差多少天
假设指定日期为2020年1月1日,那么相差的天数就是2010年还剩的天 数 365,11年到19年的整天数,20年已经过了的天数;
注意:如果是同一年,输入的日期已经过的天数-1即可
(2)一个日期和2010年1月1日相差
0天 打渔 1天 打渔 2天 打渔 3天 晒网 4天 晒网 567 打渔 89 晒网
结论:周期为5天,所以用总天数除以5计算,
相差的天数总天数%5等于0,1,2就是打渔,3,4就是晒网
(3)判断闰年与非闰年
如果年%4等于0,年份%100不等于0,年份%400等于0,则该年是闰年,否则为非闰年,且闰年366天,闰年2月份为29天,非闰年365天,非闰年二月份为365天
调试截屏:
1.本年已过天数计算
2.本年内打渔晒网计算
3.不同年份计算
4.优化处理
测试截屏:
1.同一年测试结果
2.不同年测试结果
程序流程图: