Не могу понять, почему цикл не получает правильную сумму

#java #loops #sum #do-while

#java #циклы #сумма #do-while

Вопрос:

Я пытаюсь создать ипотечный калькулятор, и по какой-то причине он получает неправильную сумму для основной суммы и процентов. Возможно ли, что, поскольку он суммируется внутри цикла do-while, он ошибается? Когда я запускаю программу, она выдает 8233,68 для основной суммы и 11423,59 для процентов. Если вы суммируете их на калькуляторе, это должно быть 8209,30 для основной суммы и 11447,97 для процентов.

 double termSelection = 0.0359;
double principal = 325000;
double effectiveMonthlyRate = 0.0029695338579054376;  
double monthlyPayment = 1638.1053796234314;
double monthlyInterest = (principal * effectiveMonthlyRate);
double monthlyPrincipal = (monthlyPayment - monthlyInterest);
double closingBalance = (principal - monthlyPrincipal);
 
int month = 1;
double totalPrincipal = 0;
double totalInterest = 0;
termSelection *= 100;

//monthly payment schedule header
System.out.println("");
System.out.printf("%nInterest Rate: %.2f%%", termSelection);
System.out.printf("%nSs", "Monthly Payment Schedule");
termSelection /= 100;

//monhtly payment schedule body
System.out.printf("%n%5ssssss", "Month", "Open Bal", "Payment", "Princ", "Interest", "Closing Bal");

do{
    System.out.printf("%n%5s.2f.2f.2f.2f.2f", month, principal, monthlyPayment, monthlyPrincipal, monthlyInterest, closingBalance);
    
    month  ;
    
    principal = closingBalance;
    
    monthlyInterest = principal * effectiveMonthlyRate; 
    
    monthlyPrincipal = monthlyPayment - monthlyInterest;
    
    closingBalance = principal - monthlyPrincipal;
    
    totalPrincipal = totalPrincipal   monthlyPrincipal;
    
    totalInterest = totalInterest   monthlyInterest;
    }
while (month <= 12); 

System.out.println("");
for (int count = 0; count <= 80; count  ){
    System.out.print('=');
}

System.out.printf("%n%5sD.2f.2f", "Ttls", totalPrincipal, totalInterest);
  

Комментарии:

1. do-while цикл не делает ничего другого, кроме запуска блока кода, который вы хотите, чтобы он выполнялся столько раз, сколько вы скажете ему запустить. Поместите некоторый System.out.println() в код, чтобы увидеть значения (или использовать отладчик) и проверить, где что-то пошло не так.

Ответ №1:

Проблема в том, что вы выполняете вычисления еще до того, как войдете в цикл

 double closingBalance = (principal - monthlyPrincipal);
  

должно быть

 double closingBalance = (principal);
  

вывод

  Ttls                                     8209.30       11447.97
  

Ответ №2:

Вы пересчитываете начальные значения MonthlyInterest и monthlyPrincipal на первой итерации цикла, а затем добавляете их к итоговым значениям. Сначала добавьте их к итоговым значениям, а затем пересчитайте.

     do {
        System.out.printf("%n%5s.2f.2f.2f.2f.2f", month, principal, monthlyPayment, monthlyPrincipal, monthlyInterest, closingBalance);

        principal = closingBalance;
        totalPrincipal  = monthlyPrincipal;
        totalInterest  = monthlyInterest;

        monthlyInterest = principal * effectiveMonthlyRate;
        monthlyPrincipal = monthlyPayment - monthlyInterest;

        closingBalance = principal - monthlyPrincipal;

        month  ;
    } while (month <= 12);