0

我是java初学者,我正在做一些练习题来复习我的java技能。

编写一个名为 season 的方法,它接受两个整数作为参数,表示月份和日期,并返回一个字符串,指示该月份和日期的季节。假设月份指定为 1 到 12 之间的整数(1 表示一月,2 表示二月,依此类推),并且月份中的日期是 1 到 31 之间的数字。

如果日期介于 12/16 和 3/15 之间,则应返回“Winter”。如果日期介于 3/16 和 6/15 之间,则应返回“Spring”。如果日期介于 6/16 和 9/15 之间,则应返回“Summer”。如果日期介于 9/16 和 12/15 之间,则应返回“Fall”。

public static String season(int month,int day){
   
    if(month>=9 && month<=12 && day==15||day==16){
        return "Fall";
    }
    else if (month>=4 && month<=6 && day==16||day==15){
       return "Spring";
     }
    else if (month>=6 && month<=9 && day==16||day==15){
         return "Summer";
     }
     else {
          return"Winter";

         
      }

  
}

但我没有得到输出。但这对我来说似乎是对的。任何人都可以告诉我哪里出错了?

4

4 回答 4

8

||优先级低于&&并且您的条件看起来不正确-您可能想编写如下内容:

if((month == 9 && day >= 16) //September, on or after the 16th
      || month == 10         //or October
      || month == 11         //or November
      || (month == 12 && day <=15)) { //or December, but before or on the 15th
    return "Fall";
}

(其他条件相同的评论)


您可以通过使用一点技巧来缩短它,但可读性可能不那么好(值得商榷):

int mdd = month * 100 + day; //date in MDD format, for example 507 for May 7th

if (mdd >= 916 && mdd <= 1215) {
    return "Fall";
}
于 2013-03-08T12:56:14.300 回答
3

你应该尝试写这样的东西:

if((month>9 && month<12) || (month==9 && day>=16) || (month==12 && day<=15)){
    return "Fall";
} else if 
    ...
}

优先级也很重要,但您必须考虑您真正想要实现的目标,并据此构建您的表达方式。

于 2013-03-08T13:01:38.767 回答
1
if(month>=9 && month<=12 && (day==15||day==16)){
    return "Fall";
}

This issue with this is that only the 15th and 16th of months 9-12 are considered the winter.

Solution

If it were up to me, I would re-factor the if-else tree to first check for months, then check the days. So for example:

if(month>=9 && month<=12)
{
    // Some special cases. 
    if((month == 9 && day < 15) || (month == 12 && day > 16))
    {
        // It isn't fall.
    }
    else
    {
        // It is fall.
    }
}
于 2013-03-08T13:03:27.480 回答
0

这运行得很好。你有一些我纠正的小错误

public static String season(int month,int day){

   if((month>=9 && month<=12) && (day==15||day==16))
       return "Fall";    
   else{ 
       if ((month>=4 && month<=6) && (day==16||day==15))
           return "Spring";        
       else{
           if ((month>=6 && month<=9) && (day==16||day==15))
               return "Summer";    
           else 
               return"Winter";
       }
   }

}

于 2013-11-05T23:05:59.130 回答