用函数简化 if 语句

Simplify if statement with functions

我正在为一个学校研讨会做一个日历项目。它应该打印彼此相继的三个月。 (您指定要打印一月,它会打印上一年的十二月、一月和二月)。

我有这个 if 语句,但我想将它简化为三行代码。我该怎么做?可能吗?

if (month == 1) {
    printMonth(12, year-1);
    printMonth(month, year);
    printMonth(month+1, year);
} else if (month == 12) {
    printMonth(month-1, year);
    printMonth(month, year);
    printMonth(1, year+1);
} else {
    printMonth(month-1, year);
    printMonth(month, year);
    printMonth(month+1, year);
}

尝试使用 ternary operator:

printMonth(month == 1 ? 12 : month - 1, month == 1 ? year - 1 : year);
printMonth(month, year);
printMonth(month == 12 ? 1 : month + 1, month == 12 ? year + 1 : year);

您可以使用 Joda 日期时间 class 来表示当前 year/month,这可能比将年和月作为独立整数携带更好。

那么你可以这样写:

printMonth(dt.minusMonths(1));
printMonth(dt);
printMonth(dt.plusMonths(1));

我自己遇到这样的问题时,倾向于采用年月结合的方式(也是为了节省一些代码行):

int monthAndYear = year * 12 + month;

printMonth(monthAndYear - 1);
printMonth(monthAndYear);
printMonth(monthAndYear + 1);

如您所见,这需要您调整 printMonth 方法,当然如果可能的话。

private void printMonth(int monthAndYear) {
    int year = monthAndYear / 12;
    int month = monthAndYear % 12;
    // other code...
}

虽然这些仍然是四行...