if-else-else if

时间:2013-03-08 12:54:18

标签: java

我是java的初学者,我正在做一些练习题,以提高我的java技能。

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

如果日期介于12/16和3/15之间,则应返回“Winter”。如果日期在3/16到6/15之间,则应返回“Spring”。如果日期在6月16日到9月15日之间,则应返回“夏季”。如果日期在9月16日到12月15日之间,则应返回“秋季”。

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 个答案:

答案 0 :(得分:8)

|| has lower precendence than &&并且你的条件看起来不正确 - 你可能想写一些类似的东西:

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";
}

答案 1 :(得分:3)

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

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

优先权也很重要,但是你必须考虑你真正想要实现的目标,并根据它来建立你的表达。

答案 2 :(得分:1)

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

这个问题是,只有9-12个月的第15和第16个被认为是冬天。

的解决方案

如果由我决定,我会重新考虑if-else树,首先检查几个月,然后查看日期。例如:

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.
    }
}

答案 3 :(得分: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";
       }
   }

}