Java 我怎样才能缩短这个?

Java 我怎样才能缩短这个?,java,Java,我得到了一个基于用户输入定义季节的方法。 例:1/6=冬季 它是可行的,但似乎应该有一种更简单的方法来实现这一点,而不是使用所有这些代码。有什么建议吗 public String getSeason() { String result = "UNKNOWN"; if (month == 1 && day >= 1) { result = "WINTER"; }

我得到了一个基于用户输入定义季节的方法。 例:1/6=冬季 它是可行的,但似乎应该有一种更简单的方法来实现这一点,而不是使用所有这些代码。有什么建议吗

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
。很抱歉,我在玩代码时尝试了不同的选项,但忘记了将该部分更改回原来的位置。为什么要创建对象之类的测试,并在可以用数字解决问题的情况下引入所有开销?