根据Java语言实现三天打鱼两天晒网的判断

一;题目要求:

根据“三天打鱼两天晒网”的俗语,用Java语言计算出从2010-01-01开始后的任意一天,是在打渔还是在晒网?

二;算法设计:
1:题目分析:

该题目关键是求得目标时间到2010-01-01的具体天数,然后用所得天数与5相除(三天打鱼两天晒网共五天),若余数为1或2,则为打渔;余数为3或4或0则为晒网

2:具体算法:

1):首先我用while循环嵌套if-else语句来对年份和月份的正确性进行判断,,若正确则进行下一步骤,否则便继续循环输入,直至正确为止。
(2):其次利用switch语句判断输入日期的正确性,此时注意与平年不同,闰年的二月有29天,所以在对二月的日期进行判断时运用if-else语句
(3):在计算输入日期与目标日期2010-01-01的相差天数时,我最开始运用“暴力相加法”,即通过循环语句计算相隔年份天数,将天数直接相加。随后发现Java语句中通过SimpleDateFormat可直接求两确定日期间相差天数
(4):最后利用if-else语句对年份进行运算,通过余数最终得出打渔或者晒网。

三;

具体代码:
检测年份输入是否正确

int y;                                             //定义输入年份
  while(true) {                                      //利用while循环语句判断输入年份是否正确,否则提示重新输入
  System.out.println("请输入年份");
     y=s.nextInt();
  if(y<2010) {                                       //利用if-else语句判断,若年份正确则break跳出循环,否则继续输入年份
   System.out.println("年份输入错误,请重新输入!");
  }else {break;                                      //错误则继续循环,正确则break跳出循环
  }
  }

检测月份输入是否正确

int m;                                              //定义输入月份
while (true) {                                      //while循环语句判断月份输入是否正确,否则重新提示输入
 System.out.println("请输入月份");
 m = s.nextInt();
 if(m<=0||m>=13) {                               //if-else语句判断月份输入是否正确,否则重新输入
  System.out.println("月份输入错误,请重新输入!");
 }else {break;                                   //错误则继续循环,正确则break跳出循环
 }
}

判断日期是否正确

int d;                                              //定义输入天数
System.out.println("请输入日期");
d=s.nextInt();
DateFormat sdf;
switch(d) {                                         //利用switch语句对12个月日期进行定义,判断输入日期是否正确
 case 1:while(true) {
  System.out.println("请输入日期");
  d=s.nextInt();
  if(d<1||d>31) {                             //判断一月输入日期是否正确,否则重新输入
   System.out.println("日期输入错误,请重新输入!");
  }else{break;}
  }
 case 2:                                          //利用if-else语句判断是否为闰年,然后对2月输入日期进行判断
  if(y%4==0&&y%400!=0||y%400==0) {
   if(d<1||d>29) {
    System.out.println("日期输入错误,请重新输入!");
   }
  }else {
   if(d<1||d>28) {
    System.out.println("日期输入错误,请重新输入!");
   }
  }
 case 3://判断三月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("日期输入错误,请重新输入!");
 }break;
 case 4://判断四月输入日期是否正确,否则重新输入
  if(d<1||d>30) {
   System.out.println("日期输入错误,请重新输入!");
 return;}break;
 case 5://判断五月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("日期输入错误,请重新输入!");
  return;}else{break;}
 case 6://判断六月输入日期是否正确,否则重新输入
  if(d<1||d>30) {
   System.out.println("日期输入错误,请重新输入!");
   return;}break;
 case 7://判断七月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("日期输入错误,请重新输入!");
  return;}break;
 case 8://判断八月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("日期输入错误,请重新输入!");
  return;}break;
 case 9://判断九月输入日期是否正确,否则重新输入
  if(d<1||d>30) {
   System.out.println("ÈÕÆÚÊäÈë´íÎó£¬ÇëÖØÐÂÊäÈ룡");
  return;}break;
 case 10://判断十月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("ÈÕÆÚÊäÈë´íÎó£¬ÇëÖØÐÂÊäÈ룡");
  return;}break;
 case 11://判断十一月输入日期是否正确,否则重新输入
  if(d<1||d>30) {
   System.out.println("ÈÕÆÚÊäÈë´íÎó£¬ÇëÖØÐÂÊäÈ룡");
  return;}break;
 case 12://判断十二月输入日期是否正确,否则重新输入
  if(d<1||d>31) {
   System.out.println("ÈÕÆÚÊäÈë´íÎó£¬ÇëÖØÐÂÊäÈ룡");
  return;}break;
}

计算所给日期与目标日期相差天数,与五相除根据余数判断打鱼还是晒网

String tardate = y+"-"+m+"-"+d;//将整形日期强制转换为字符型
String date1="2010-01-01";
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");//利用SimpleDateFormat计算两日期间相差天数
Date d2=sdf1.parse(tardate);
Date d1=sdf1.parse(date1);
long daysBetween=(d2.getTime()-d1.getTime())/(3600*24*1000);
System.out.println("该日距2010-01-01相差"+daysBetween+"天");
if((y-2005)%5==1||(y-2005%5)==2||(y-2005%5==3)) {//利用if-else语句,令天数与5相除,若余数为1,2,3则打鱼
 System.out.println("该日打鱼");
}else{if((y-2005)%5==0||(y-2005)%5==4) {
 System.out.println("该日晒网");   //否则晒网
}
s.close();//调用析构函数清除s
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值