Есть рабочий код на одну задачу деления в столбик. Нужно добавить еще одну задачу.
Это будет выглядеть как:
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));
}
}
используйте каждый раз новый объект Division
System.out.println(new Division().createLongDivision(1000, 15));
System.out.println(new Division().createLongDivision(1034, 15));
или реализуйте возврат состояния всех переменных объекта к исходным значениям после работы
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Не могу понять по какому принципу работает этот кодЭто первая часть кода:
Скажите, пожалуйста, как правильно считывать данные из FirebaseРаботаю по документации, делаю вроде все так, но выводит 'Database Permission denied'