我是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";
}
}
但是我没有得到输出。但它似乎对我来说。任何人都可以告诉我哪里出错了?
答案 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";
}
}
}