Java 我怎样才能缩短这个?
我得到了一个基于用户输入定义季节的方法。 例:1/6=冬季 它是可行的,但似乎应该有一种更简单的方法来实现这一点,而不是使用所有这些代码。有什么建议吗Java 我怎样才能缩短这个?,java,Java,我得到了一个基于用户输入定义季节的方法。 例:1/6=冬季 它是可行的,但似乎应该有一种更简单的方法来实现这一点,而不是使用所有这些代码。有什么建议吗 public String getSeason() { String result = "UNKNOWN"; if (month == 1 && day >= 1) { result = "WINTER"; }
public String getSeason()
{
String result = "UNKNOWN";
if (month == 1 && day >= 1)
{
result = "WINTER";
}
else if (month == 2 && day >= 1)
{
result = "WINTER";
}
else if (month == 3 && day <= 20)
{
result = "WINTER";
}
else if (month == 3 && day >= 21)
{
result = "SPRING";
}
else if (month == 4 && day >= 1)
{
result = "SPRING";
}
else if (month == 5 && day >= 1)
{
result = "SPRING";
}
else if (month == 6 && day <= 20)
{
result = "SPRING";
}
else if (month == 6 && day >= 21)
{
result = "SUMMER";
}
else if (month == 7 && day >= 1)
{
result = "SUMMER";
}
else if (month == 8 && day >= 1)
{
result = "SUMMER";
}
else if (month == 9 && day <= 22)
{
result = "SUMMER";
}
else if (month == 9 && day >= 23)
{
result = "FALL";
}
else if (month == 10 && day >= 1)
{
result = "FALL";
}
else if (month == 11 && day >= 1)
{
result = "FALL";
}
else if (month == 12 && day <= 20)
{
result = "FALL";
}
else if (month == 12 && day >= 21)
{
result = "FALL";
}
return result;
}
公共字符串getSeason()
{
字符串结果=“未知”;
如果(月=1日>=1)
{
结果=“冬季”;
}
如果(月==2日>=1日)发生其他情况
{
结果=“冬季”;
}
否则如果(月=3日=21日)
{
结果=“弹簧”;
}
否则,如果(月==4日>=1)
{
结果=“弹簧”;
}
如果(月==5日>=1日)发生其他情况
{
结果=“弹簧”;
}
否则如果(月=6天=21)
{
结果=“夏季”;
}
如果(月==7日&&day>=1)发生其他情况
{
结果=“夏季”;
}
如果(月==8日&&day>=1)
{
结果=“夏季”;
}
否则,如果(月=9日和日=23日)
{
result=“FALL”;
}
如果(月==10日&&day>=1)发生其他情况
{
result=“FALL”;
}
如果(月==11日和日>=1),则为其他情况
{
result=“FALL”;
}
否则,如果(月=12日和日=21日)
{
result=“FALL”;
}
返回结果;
}
你可以通过扔掉不必要的天>=1
(还能是什么?)并将几个月与相同的结果结合起来来缩短时间:
if (month <= 2 || (month == 3 && day <= 20) || (month == 12 && day >= 21)) {
// Winter
} else if (month <= 5 || (month == 6 && day <= 21)) {
// Spring
} else if (month <= 8 || (month == 9 && day <= 22)) {
// Summer
} else {
// Fall
}
如果(月使用开关
switch (month) {
case 1: case 2: /* Winter */; break;
case 3: if (day <= 20) {/* Winter */} else {/* Spring */} break;
case 4: case 5: /* Spring */; break;
case 6: if (day <= 21) {/* Spring */} else {/* Summer */} break;
// Continue the pattern...
default: /* Unknown */; break;
}
开关(月){
案例1:案例2:/*冬季*/;休息;
案例3:if(day这里有一种不同的方法来看待这个问题,使用Java Calendar类。例如(未测试的代码),当您需要闰年检测时,它会稍微复杂一些,但正如我所说,用一种不同的方法来思考这个问题
public String testSeason(int year, int month, int day) {
//month is 0 based!
int FIRST_DAY_OF_SPRING = 31 + 28 + 21; // might need leap year detection to be completely accurate.
int FRIRST_DAY_OF_SUMMER = FRST_DAY_OF_SPRING + 10 + 31 + 30 +31;
// define FALL and WINTER similarly.
Calendar testDate = new Calendar();
testDate.set(year,month,day);
if (testDate.get(Calendar.DAY_OF_YEAR) < FIRST_DAY_OF_SPRING) return "Winter";
if (testDate.get(Calendar.DAY_OF_YEAR) < FIRST_DAY_OF_SUMMER) return "Spring";
// continue for rest of seasons.
}
公共字符串测试季节(整年、整月、整日){
//月份以0为基础!
int SPRING的第一天=31+28+21;//可能需要闰年检测才能完全准确。
夏季第一天=春季第一天+10+31+30+31;
//同样地定义秋天和冬天。
Calendar testDate=新日历();
testDate.set(年、月、日);
如果(testDate.get(Calendar.DAY OF theu YEAR)<春季第一天)返回“冬季”;
如果(testDate.get(日历年中的第一天)<夏季的第一天)返回“春天”;
//在余下的季节继续。
}
只需将多个测试合并为一个:如果(月<3 | |月==3&&day=21){result='WINTER'}其他{…
等。一些测试是不必要的,例如月==2日>=1
。很抱歉,我在玩代码时尝试了不同的选项,但忘记了将该部分更改回原来的位置。为什么要创建对象之类的测试,并在可以用数字解决问题的情况下引入所有开销?