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

вот что у меня уже есть буду благодарен за любую помощь.
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 шт):
Т.к. в данном случае речь идет не о математике(это простейший пример деления, для него не нужно писать отдельных методов), а о специфическом выводе результата в консоль, то я рекомендую сосредоточиться на переопределении метода toString. Просто начните его переопределять и в какой-то момент Вы поймете, что для следущей строки вывода нужно написать код и напишите его. Что я имею в виду:
- Создадим простейший класс объекта (тут обращаем внимание, что
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;
}
}
- Теперь переопределяем метод вывода в таком формате, в каком нам нужно:
@Override
public String toString() {
return "_"+this.divident+"|"+this.divisor+"\n"
+" " + this.divisor;
}
// в консоли вывод объекта Division d = new Division(11445,23) выглядит так
_11445|23
23
// Обратите внимание насколько логично передавать в конструктор первым параметром делимое,
// а вторым делитель
- Теперь смотрим, чего нам не хватает, чтоб продолжит вывод. А нам не хватает метода, который делал бы отступ на разницу длинн делителя и делимого, у вас этот метод уже есть, берем его немного изменив:
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 |
- Теперь нам нужен метод, который бы проставлял знак минус столько раз, какова длинна нашего
rezalt
Продолжайте продвигаться по такой логике дальше и у Вас все получится.