Упростите оператор if с помощью функций - PullRequest
1 голос
/ 11 января 2020

Я работаю над проектом календаря для школьного семинара. Предполагается напечатать три месяца, которые go друг за другом. (Вы указываете, что хотите, чтобы он печатал январь, а он печатает декабрь предыдущего года, январь и февраль).

У меня есть выражение 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);
}

Ответы [ 3 ]

2 голосов
/ 11 января 2020

Попробуйте использовать троичный оператор :

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);
1 голос
/ 11 января 2020

Вы можете использовать класс Joda DateTime для представления текущего года / месяца, что, вероятно, лучше, чем перенос года и месяца в виде независимых целых чисел.

Тогда вы можете написать:

printMonth(dt.minusMonths(1));
printMonth(dt);
printMonth(dt.plusMonths(1));
0 голосов
/ 11 января 2020

Когда у меня возникла такая проблема, я использовал комбинацию года и месяца (также потому, что хотел сохранить несколько строк кода):

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

И это все еще четыре строки, хотя ...

...