簡體   English   中英

用函數簡化 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);
}

嘗試使用三元運算符

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 DateTime 類來表示當前的年/月,這可能比將年和月作為獨立整數攜帶更好。

然后你可以寫:

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

雖然這些仍然是四行...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM