Нужна помощь в вычислениях таблицы амортизации Java - PullRequest
0 голосов
/ 14 мая 2011

Это моя домашняя работа, которая должна быть сделана в понедельник 16-го. Наконец-то я получил правильные месяцы, но суммы неправильные. Также не обязательно, но было бы неплохо остановиться и напечатать что-то между каждым кредитом. Как кредит 1, кредит 2, кредит 3 ...

Любая помощь будет оценена

/*Write the program in Java (without a graphical user interface) 
and have it calculate the payment amount for 3 mortgage loans:

 - 7 year at 5.35%
 - 15 year at 5.5%
 - 30 year at 5.75%

Use an array for the different loans. 
Display the mortgage payment amount for each loan 
and then list the loan balance and interest paid for 
each payment over the term of the loan. 
Use loops to prevent lists from scrolling off the screen.*/

У меня правильные месяцы, но суммы займа неверны.

    import java.io.IOException;      //Code that delays ending the program


   class MonthlyRhondav4
    {      

  public static void main ( String[] args) throws IOException{

     double loanAmount = 200000.00;   // $ amount borrowed
     double monthlyPayment = 0;   // monthly payment for calculating
     double loanBalance;
     double interestPaid;
     double principalPaid;
     int paymentCounter;
     int lineCounter = 0;



     java.text.DecimalFormat dcm = new java.text.DecimalFormat("$,###.00");                                      


     int termArray[] = {84, 180, 360};      // Different loan terms in months 
     double interestArray[] = {0.0535, 0.055, 0.0575};// Different interest rates for the loan
     int k =0;// gonna be paymentIndex

  /*Code to start the payment list*/   

     System.out.print("\n\nPlease Press Enter to Continue to the 3 Different    Amortization Lists");
     System.out.println ();
     System.out.println ();

     System.in.read();
     System.in.read();  

  /*Display columns*/    

     System.out.println("Month \t Loan Amount Left\tInterest\t\tPrincipal \n"); //Prints headers for columns
     System.out.println ();


  /*Loop to calculate and print monthly payments*/

     //for(k=0; k<3; k++){// k is going to be paymentIndex to loop through index

     for (k = 0; k < interestArray.length; k++) {

        for(paymentCounter =1; paymentCounter <= termArray[k]; paymentCounter++)  // months through array
        { 

        /********TROUBLE HERE***************************************************************************************/

           monthlyPayment = ((loanAmount * (interestArray[k]) * termArray[k]) + loanAmount) / (termArray[k] * 12);

           interestPaid = loanAmount*(interestArray[k]/12);            //interest paid through array

           principalPaid = monthlyPayment-loanAmount*(interestArray[k]/12);       //principal paid

      /*need to fig monthly payment+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/




           System.out.println(paymentCounter + "\t" + dcm.format(loanAmount) + "\t\t" + dcm.format(interestPaid) + "\t\t\t" + dcm.format(principalPaid));



           lineCounter++;                                //Increment the display counter
           if (lineCounter > 11 && paymentCounter < termArray[k]*12) //Check to see if 12             
           {

              System.out.println ("Please Press Enter to Continue the List" ); //Code to delay ending the program
              System.in.read();
              System.in.read();
              lineCounter = 0; 

           }

        }
        loanAmount = (loanAmount - (monthlyPayment-loanAmount*(interestArray[k]/12))); //Calculate new loan amount
     }


  }//ends public static void main 
     }//ends public class 

Ответы [ 3 ]

0 голосов
/ 14 мая 2011

Одно наблюдение - вы ничего не делаете с остатком кредита.Причина, по которой ничего не меняется, заключается в том, что, рассчитав проценты и основную сумму данного платежа, вы не уменьшаете остаток займа на основную часть платежа.Вам необходимо изменить свой код, чтобы отобразить текущий остаток по кредиту и вычислить сумму основного долга / процентов по текущему остатку по кредиту, а не по первоначальной сумме кредита.


Отредактировано

Хорошо - я вижу, что вы пытались обновить баланс, но у вас он за пределами цикла для ссуды.Это должно быть внутри цикла, чтобы он обновлялся для каждого платежа.Кроме того, у вас есть такие вещи, как loanAmount * (interestArray[k] / 12) снова и снова.Подумайте об использовании переменных, таких как

double interestPaid = loanAmount * (interestArray[k] / 12)

. Это сделает ваш код более легким для чтения и более понятным, поскольку, если вы обнаружите ошибку в вычислениях, вам нужно будет только исправить ошибку в одном месте, а неисправляйте это везде, где у вас были расчеты.

Я также не вижу, где вы рассчитываете ежемесячный платеж.Это функция первоначальной суммы кредита, количества платежей и процентной ставки.Помните, что ежемесячный платеж фиксирован, и процентное / основное распределение каждого платежа будет меняться по мере погашения кредита.http://en.wikipedia.org/wiki/Mortgage_calculator может пригодиться для определения формулы ежемесячного платежа.

0 голосов
/ 14 мая 2011

много ошибок.Например, вы никогда не устанавливаете monthlyPayment на что-либо кроме 0. Вы также не используете loanBalance.loanAmount должно быть константой.Вы также можете упростить избыточные вычисления.Пример:

 interestPaid = loanBalance*(interestArray[k]/12); 
 principalPaid = monthlyPayment-interestPaid; 

вместо

 interestPaid = loanBalance*(interestArray[k]/12); 
 principalPaid = monthlyPayment-loanBalance*(interestArray[k]/12);

Я также не уверен, что у вас есть правильные формулы процентной ставки, но я не собираюсь проверять, пока вы не удалите некоторые из более очевидных ошибок.

0 голосов
/ 14 мая 2011

первое: никогда не используйте double для вычисления чего-либо ... Это совет, который вы должны запомнить.Если вы не хотите доверять мне, поищите в Google «двойное вычисление Java» или что-то в этом роде, и вы увидите.Или почитайте отличную книгу «Эффективная Java»

Класс BigDecimal для правильных чисел в Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...