Вывод длинного деления в столбик

Вопрос такой, не пойму с чего начать вывод длинного деления в столбик, я уже сделал расчет чисел и сохранил их в массивы, теперь мне нужно сделать такой вывод, как на картинке:

вот что у меня уже есть буду благодарен за любую помощь.

import java.util.LinkedList;

public class Division {
    private int divisor;
    private int divident;
    private int quotient;
    private LinkedList<Integer> blackNumbersList;
    private LinkedList<Integer> greenNumbers;

    public Division(int divisor, int divident) {
        this.divisor = divisor;
        this.divident = divident;
        calculateAnswer();
    }

    private void calculateAnswer() {
        if (divisor == 0) {
            throw new IllegalArgumentException("Divisor cannot be 0, division by zero");
        }
        quotient = divident / divisor;

        LinkedList<Integer> digitsOfQoutient = getListOfDigits(quotient);// Остача
        LinkedList<Integer> greenNumbers = new LinkedList<>(); 

        for (int digit : digitsOfQoutient) {
            int subtractionResult = digit * divisor;
            greenNumbers.add(subtractionResult);
        }
        LinkedList<Integer> dividentArray = getListOfDigits(divident);
        LinkedList<Integer> blackNumbersList = new LinkedList<>();

        int currentDivident = dividentArray.removeFirst();
        int currentGreenNumber = greenNumbers.get(0);

        while (currentDivident < currentGreenNumber) {
            currentDivident = currentDivident * 10 + dividentArray.removeFirst();
        }

        for (int i = 0; i < dividentArray.size(); i++) {
            currentDivident = (currentDivident - greenNumbers.get(i)) * 10 + dividentArray.get(i);
            blackNumbersList.add(currentDivident);

        }

    }

    public LinkedList<Integer> getListOfDigits(int number) {
        LinkedList<Integer> digits = new LinkedList<>();

        while (number > 0) {
            digits.push(number % 10);
            number /= 10;
        }
        return digits;
    }

    public String getDivisionView() {
        StringBuilder sb = new StringBuilder();
        sb.append(divident);
        sb.append("|");
        sb.append(divisor);
        sb.append("___\n");
        sb.append(getSpaces(8));
        sb.append("  |");
        sb.append(quotient);
        sb.append("\n");
        sb.append("\n");
        sb.append("\n");

        for (Integer j : blackNumbersList) {
            for (Integer i : greenNumbers) {
                System.out.println(blackNumbersList + "\n" + "-" + greenNumbers);

            }

        }
        return sb.toString();

    }

    private String getSpaces(int count) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count; i++) {
            sb.append(" ");
        }
        return sb.toString();
    }
}

Ответы (1 шт):

Автор решения: Qwer

Т.к. в данном случае речь идет не о математике(это простейший пример деления, для него не нужно писать отдельных методов), а о специфическом выводе результата в консоль, то я рекомендую сосредоточиться на переопределении метода toString. Просто начните его переопределять и в какой-то момент Вы поймете, что для следущей строки вывода нужно написать код и напишите его. Что я имею в виду:

  1. Создадим простейший класс объекта (тут обращаем внимание, что rezalt тоже имеет тип int, соответственно все, что "после запятой" просто отбрасывается, но как было сказано - дело не в математике):
public class Division {
    private int divident;
    private int divisor;
    private int rezalt;

    public Division(int divident, int divisor) {
        this.divident = divident;
        this.divisor = divisor;
        this.rezalt = divident/divisor;
    }
    }
  1. Теперь переопределяем метод вывода в таком формате, в каком нам нужно:
 @Override
    public String toString() {
        return "_"+this.divident+"|"+this.divisor+"\n"
                +" " + this.divisor;
    }

// в консоли вывод объекта Division d = new Division(11445,23) выглядит так
_11445|23
 23
// Обратите внимание насколько логично передавать в конструктор первым параметром делимое, 
// а вторым делитель
  1. Теперь смотрим, чего нам не хватает, чтоб продолжит вывод. А нам не хватает метода, который делал бы отступ на разницу длинн делителя и делимого, у вас этот метод уже есть, берем его немного изменив:
 private StringBuilder getSpaces(int count) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count; i++) {
            sb.append(" ");
        }
        return sb;
    }

//теперь наш метод toString выглядит так 

 @Override
    public String toString() {
        return "_"+this.divident+"|"+this.divisor+"\n"
                +" " + this.divisor + getSpaces(Integer. toString (divident).length()-Integer. toString (divisor).length()) + "|";
    }

// и выводит следующий результат
_11445|23
 23   |
  1. Теперь нам нужен метод, который бы проставлял знак минус столько раз, какова длинна нашего rezalt

Продолжайте продвигаться по такой логике дальше и у Вас все получится.

→ Ссылка