Тест программы, которая делает деление в столбик :
Класс, который выводит результат деления 0 на 100 :
private String drawResultForDividentThatEqualsZero(StringBuilder result, Integer divisor) {
result.append("_0").append(SYMBOL_VERTICAL_BAR).append(divisor.toString()).append("\n");
result.append(" 0").append(SYMBOL_VERTICAL_BAR).append("-").append("\n");
result.append(" -").append(SYMBOL_VERTICAL_BAR).append("0").append("\n");
result.append(" 0");
return result.toString();
}
И 2 важных момента :
public static final String SYMBOL_VERTICAL_BAR = "|";
StringBuilder result = new StringBuilder();
Тест, который не проходит :
@Test
public void Should_MakeDivision_When_DividentEqualsZero() {
String expected = "_0│100\n" +
" 0│-\n" +
" -│0\n" +
" 0";
assertEquals(expected, numbersDivision.makeDivision(0, 100));
}
Основной метод makeDivison :
public String makeDivision(int introducedDividend, int introducedDivisor) {
StringBuilder result = new StringBuilder();
StringBuilder reminder = new StringBuilder();
StringBuilder quotientForDividentMoreThanDivisor = new StringBuilder();
StringBuilder quotientForDividentLessThanDivisor = new StringBuilder("0.");
StringBuilder lastReminderNumber = new StringBuilder();
int dividend = Math.abs(introducedDividend);
int divisor = Math.abs(introducedDivisor);
checkExceptions(divisor);
Integer divisorMuplipliedByQuotient = 0;
Integer reminderInInteger = 0;
Integer newReminder = 0;
String[] digits = String.valueOf(dividend).split("");
mainMethodForCalculateDivision(dividend, divisor, digits, reminderInInteger, reminder, divisorMuplipliedByQuotient, result, quotientForDividentMoreThanDivisor, quotientForDividentLessThanDivisor,
newReminder, lastReminderNumber);
return result.toString();
}
И mainMethodForCalculateDivision :
private String mainMethodForCalculateDivision(Integer dividend, int divisor, String[] digits, Integer reminderInInteger, StringBuilder reminder, Integer divisorMuplipliedByQuotient,
StringBuilder result, StringBuilder quotientForDividentMoreThanDivisor, StringBuilder quotientForDividentLessThanDivisor,
Integer newReminder, StringBuilder lastReminderNumber) {
if (dividend == 0) {
drawResultForDividentThatEqualsZero(result, divisor);
return result.toString();
}
if (dividend >= divisor) {
for (int i = 0; i < digits.length; i++) {
calculateDivisionWhenDividentMoreOrEqualsDivisor(reminder, digits, i, divisor, divisorMuplipliedByQuotient, dividend,
result, quotientForDividentMoreThanDivisor, quotientForDividentLessThanDivisor, newReminder, lastReminderNumber);
}
improveResultViewing(dividend, divisor, result, quotientForDividentLessThanDivisor, quotientForDividentMoreThanDivisor, lastReminderNumber,
reminderInInteger);
return result.toString();
}
checkIfDividentEqualsZeroOrLessThanDivisorAndCalculate(dividend, divisor, reminder, reminderInInteger, digits, divisorMuplipliedByQuotient, newReminder, quotientForDividentMoreThanDivisor,
quotientForDividentLessThanDivisor, result, lastReminderNumber);
return result.toString();
}
Может не получается перевести со StringBuilder в String, но если и так, то не понимаю, где именно..
В expected и SYMBOL_VERTICAL_BAR вертикальные палки разные.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу научиться программировать на JAVAНеделю назад начал активно изучать по видео урокам данный язык
Есть два примера сихронизированного кодаВ первом блокировка не работает, во втором работает