Поочередное выполнение задач

183
16 февраля 2019, 18:30

Есть рабочий код на одну задачу деления в столбик. Нужно добавить еще одну задачу.

Это будет выглядеть как:

System.out.println(division.createLongDivision(1000, 15)); System.out.println(division.createLongDivision(1034, 15));

Но в выводе все перемешивается. Как реализовать правильную обработку двух и более задач?

public class Division {
    private StringBuilder result = new StringBuilder();
    private StringBuilder quotient = new StringBuilder();
    private StringBuilder reminder = new StringBuilder();
    public String createLongDivision(int dividend, int divisor) {
        dividend = Math.abs(dividend);
        divisor = Math.abs(divisor);
        if (divisor == 0) {
            throw new IllegalArgumentException("Divisor can't be 0");
        }
        if (dividend < divisor) {
            throw new IllegalArgumentException("Dividend can't be less than divisor");
        }
        String[] digits = String.valueOf(dividend).split("");
        Integer reminderNumber;
        Integer multiplyResult;
        Integer mod;
        for (int i = 0; i < digits.length; i++) {
            reminder.append(digits[i]);
            reminderNumber = Integer.parseInt(reminder.toString());
            if (reminderNumber >= divisor) {
                mod = reminderNumber % divisor;
                multiplyResult = reminderNumber / divisor * divisor;
                String lastReminder = String.format("%" + (i + 2) + "s", "_" + reminderNumber.toString());
                result.append(lastReminder).append("\n");
                String multiply = String.format("%" + (i + 2) + "d", multiplyResult);
                result.append(multiply).append("\n");
                Integer tab = lastReminder.length() - calculateDigit(multiplyResult);
                result.append(createDivisor(multiplyResult, tab)).append("\n");
                quotient.append(reminderNumber / divisor);
                reminder.replace(0, reminder.length(), mod.toString());
                reminderNumber = Integer.parseInt(reminder.toString());
            } 

            if (i == digits.length - 1) {
                result.append(String.format("%" + (i + 2) + "s", reminderNumber.toString())).append("\n");
            }
        }
        modifyResultView(dividend, divisor);
        return result.toString();
    }
    private String createDivisor (Integer multiplyResult, Integer tab) {
        return assemblyString(tab, ' ') + assemblyString(calculateDigit(multiplyResult), '-');
    }
    private int calculateDigit(int i) {
        return (int) Math.log10(i) + 1;
    }
    private String assemblyString(int numberOfSymbols, char symbol) {
        StringBuilder string = new StringBuilder();
        for (int i = 0; i < numberOfSymbols; i++) {
            string.append(symbol);
        }
        return string.toString();
    }
    private void modifyResultView(Integer dividend, Integer divisor) {
        int[] index = new int[3];
        for (int i = 0, j = 0; i < result.length(); i++) {
            if (result.charAt(i) == '\n') {
                index[j] = i;
                j++;
            }
            if (j == 3) {
                break;
            }
        }
        int tab = calculateDigit(dividend) + 1 - index[0];
        result.insert(index[2], assemblyString(tab, ' ') + "│" + quotient.toString());
        result.insert(index[1], assemblyString(tab, ' ') + "│" + assemblyString(quotient.length(), '-'));
        result.insert(index[0], "│" + divisor);
        result.replace(1, index[0], dividend.toString());
    }
    public static void main(String[] args) {
        Division division = new Division();
        System.out.println(division.createLongDivision(1000, 15));
        }
}
Answer 1

используйте каждый раз новый объект Division

    System.out.println(new Division().createLongDivision(1000, 15));
    System.out.println(new Division().createLongDivision(1034, 15));

или реализуйте возврат состояния всех переменных объекта к исходным значениям после работы

READ ALSO
Не могу понять принцип работы кода, Треугольник Серпинского

Не могу понять принцип работы кода, Треугольник Серпинского

Не могу понять по какому принципу работает этот кодЭто первая часть кода:

188
Как считать данные из базы Firebase?

Как считать данные из базы Firebase?

Скажите, пожалуйста, как правильно считывать данные из FirebaseРаботаю по документации, делаю вроде все так, но выводит 'Database Permission denied'

171
Скачет содержимое flex

Скачет содержимое flex

ИзвиняюсьПеределал немного

233