Рефакторинг длины метода

271
07 марта 2018, 07:13

Как можно сократить такой вот метод

public String format(DivisionResult divisionResult) {
StringBuilder result = new StringBuilder();
// -------change-----------------------------
if (divisionResult == null || divisionResult.getDivisor() == 0) {
    return "";
}
if (divisionResult.getDividend() == 0) {
    return "0";
}
 // -------change-----------------------------
int[] multiplyResult = divisionResult.getMultiplyResult();
int[] remainderNumbers = divisionResult.getRemainderNumber();
int remainderElementLength = remainderNumbers.length;
for (int i = 0; i < remainderElementLength; i ++) {
    if (i == remainderElementLength - 1) {
        int indent = (remainderNumbers[i] != 0) ? 1 : 0;
        result.append(String.format("%" + (i + indent) + "s", remainderNumbers[i])).append("\n");
        break;
    }
    if (multiplyResult[i] != 0) {
        result.append(_formLastSection(remainderNumbers[i], multiplyResult[i], i));
    }
}
modify(divisionResult, result);
return result.toString();
}

Вроде как-то можно упростить блок if выделенный как --Change--, но я не могу понять как. Подойдут любые варианты

Answer 1

Мне кажется, что условие if (i == remainderElementLength - 1) { имеет смысл вытащить из цикла

int[] multiplyResult = divisionResult.getMultiplyResult();
int[] remainderNumbers = divisionResult.getRemainderNumber();
int lastRemainderElement = remainderNumbers.length - 1;
for (int i = 0; i < lastRemainderElement; i++) {
    if (multiplyResult[i] != 0) {
        result.append(_formLastSection(remainderNumbers[i], multiplyResult[i], i));
    }
}
int indent = (remainderNumbers[lastRemainderElement] != 0) ? 1 : 0;
result
  .append(String.format(
    "%" + (lastRemainderElement + indent) + "s%n",
    remainderNumbers[lastRemainderElement]
  ));
modify(divisionResult, result);
return result.toString();

Ну и должно выполняться условие remainderNumbers.length > 0

READ ALSO
Последовательный Animator Android Studio

Последовательный Animator Android Studio

В разработке под android новичок, имеется ImageView, в который подгружается новая фотография при кликеХочу, чтобы ImageView сначала исчезал, затем подгружалась...

272
SQL-запрос на обновление данных

SQL-запрос на обновление данных

В таблице четыре колонки id, name, description и priceМне надо создать метод void changeDescription() который удаляет последнее предложение из description всех продуктов...

340
Java сортировка по количеству букв

Java сортировка по количеству букв

Всем приветЯ относительно недавно начал изучать Java

337