Solved

# Java Mortgage Amortization

Posted on 2006-07-17
Medium Priority
669 Views
I have completed this much of it but need the program somehow to only display the payments based upon a 5.75% rate but when I change it to only reflect a 30 year loan at 5.75%, it does not compile.  This actually compiles but the payments are all jacked and I can't figure it out.  I am trying to show the \$200,000 balance and the first payment as well as interest paid and continue displaying this until the balance is zero.  Please help !  Here's what I have now:

//import the java classes
import java.text.NumberFormat;
import java.util.Locale;

public class MortgageMulti {
//MortgageMulti is the existing function
public static void main(String[] arguments) {

//hard code the value of the mortgage
double mortgage = 200000.00;
//hard code in the yearly interst rate
double[][] yearsYearlyRate = {
{ 7, 15, 30 },
{ 5.35, 5.5, 5.75 }
};
//then code in the value for the number of times a year mulitplied by
// the amoutn paid each time
double[][] monthsMonthlyRt = {
{ yearsYearlyRate[0][0] * 12, yearsYearlyRate[0][1] * 12,
yearsYearlyRate[0][2] * 12
},
{ yearsYearlyRate[1][0] / 1200, yearsYearlyRate[1][1] / 1200,
yearsYearlyRate[1][2] / 1200
}
};

for (int i = 0; i < 3; i++) {

//Call the method
double payment = calPayment(monthsMonthlyRt[1][i], monthsMonthlyRt[0][i], mortgage);

// Display the monthly payment
System.out.println("\nMortgage Amount \tTerm \t\tRate \t\tMonthly Payment");
System.out.println("\$200,000 \t\t" + yearsYearlyRate[0][i] + " years\t"
+ yearsYearlyRate[1][i] + "%\t\t" + payment);

System.out.println("\nMonth # \tInterest for the Month \t\tLoan Balance");

// Call the method
interestBalanceList(mortgage, monthsMonthlyRt[1][i], monthsMonthlyRt[0][i], payment);
}
}

// Utility method to calculate the monthly mortgage payment
// (1st error spotted)public static double calPayment(double param1, double
// param2, double mortgage);
public static double calPayment(double param1, double param2, double mortgage) {

// Calculate the monthlyPayment of the mortgage
double monthlyPayment = (param1 + param2 / (Math.pow((1 + param1), param2) - 1)) * mortgage;

return monthlyPayment;
}

// Utility method to list the interest paid and loan balance
public static void interestBalanceList(double mortgage, double param1, double param2,
double payment) {

// Use the for loop to display the list
for (int i = 1; i < (param2 + 1); i++) {

// Pause the list and go to the next month and next amount
System.out.println("Hit the 'ENTER' key to exit.");
try {
} catch (Exception e) {
}
// Calculate the monthlyInterest
double monthlyInterest = mortgage * param1;

// Calculate the loanBlance
double loanRemaining = mortgage - (payment - monthlyInterest);

// Set the value of mortgageAmount to the value of loanRemaining
mortgage = loanRemaining;

// Formate the monthlyInterest into U.S. currency
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String str = n.format(monthlyInterest);

// Formate the loanRemaining into U.S. currency
NumberFormat num = NumberFormat.getCurrencyInstance(Locale.US);
String string = num.format(loanRemaining);

// Display the month #, interest paid and loan balance
System.out.println("\n " + i + "\t\t " + str + "\t\t\t" + string);

}
}
}
0
Question by:waw9667
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions
• 6
• 5

LVL 35

Expert Comment

ID: 17128398
Hi waw9667

can you be more specific? I am not sure I understand what exactly you would like to do.

Cheers
0

LVL 10

Expert Comment

ID: 17128854
>>  double monthlyPayment = (param1 + param2 / (Math.pow((1 + param1), param2) - 1)) * mortgage;

i think this is not correct,

monthly payment is greater the mortage itself, so you get negative balance and it keeps on increasing in negative

0

Author Comment

ID: 17130298
I'll be more specific with what I am trying to do.  The program should do something like this:

Mortgage Payment     |     Interest Rate     |     Interest Paid     |     New Balance

The program starts with a balance of \$200,000 and the four categories above will obviously display new numbers on every line as the loan will be decreasing and I need to do this until the loan reaches zero.  I hope this gives you a better understanding of what I am trying to accomplish and I certainly appreciate your speedy response to my post.  I am staying home from work today with much hope that I can get this completed which means I will be on the computer all day, so I will also be able to respond back just as timely.  Thank you for your help.
0

LVL 10

Expert Comment

ID: 17130337
did u check that formula,
0

Author Comment

ID: 17130385
I can definitely see what you're saying about the formula and that would explain why it compiles the way it does.  However, I have not successfully changed the formula yet.
0

LVL 10

Expert Comment

ID: 17130900
check this link for formula on mortage calculator,

http://infoscouts.com/finance/mortgagecalc.htm

try giving the monthly payments as given by the calculator,

your code is working fine
0

Author Comment

ID: 17130962
I forgot to mention that this program is without a GUI.
0

Author Comment

ID: 17130984
However, I am assuming you wanted me to view the source code of that calculator.  Am I correct ?
0

LVL 10

Expert Comment

ID: 17131033
public static double calPayment(double param1, double param2, double mortgage) {

double tmp = 1 + ( param1 ) ;
for ( int i = 1 ; i < param2 ; i++)
tmp = tmp * ( 1 + param1 ) ;
double monthlyPayment = mortgage * tmp * param1 / ( tmp - 1 ) ;

// Calculate the monthlyPayment of the mortgage
//double monthlyPayment = (param1 + param2 / (Math.pow((1 + param1), param2) - 1)) * mortgage;

return monthlyPayment;
}
0

LVL 10

Accepted Solution

mukundha_expert earned 2000 total points
ID: 17131039
use the above method instead of yours... now the code works
0

Author Comment

ID: 17131269
Again, thank you for your incredibly fast response time.  My only problem here is that I want the payments to calculate at a 5.75% interest rate on a 30 year loan and not 7 but when I manipulate the code to my desired data, it will not compile.  Here is my code for displaying the monthly payment on a \$200,000 loan at 5.75% on a 30 year term:

import java.io.*;
import java.util.Date;
import java.text.DecimalFormat;

//More java packages can be added here for the Week Three Assignment

public class Mortgage

{
public static void main(String[] args)

{

Date currentDate = new Date();
//Date Constructor
DecimalFormat decimalPlaces = new DecimalFormat("\$0.00");

//Declaring Variables
double dPrincipal = 200000.00; //Total Loan or Principal Amount
double dInterest = .0575;  //Interest Rate all Payments are Calculated at
double dTerm = 12*30; //Total Term of Loan in Months
double dMonthlyInterest = dInterest/12;

//Declaring Variables

final double dMonthly = dPrincipal * (dMonthlyInterest / (1 - Math.pow(1 + dMonthlyInterest,-dTerm)));
//The above formula calculates and determines the exact monthly payment based upon input

//The following code will display the output of the program
System.out.println("\t\t" + currentDate);
System.out.println("\t\tThe Total Loan Amount is: " + decimalPlaces.format(dPrincipal));
System.out.println("\t\tThe Calculated Interest Rate is: " + dInterest);
System.out.println("\t\tThe Total Number of Monthly Payments is: " + dTerm);
System.out.println("\t\tThe Total Monthly Payment is: " + decimalPlaces.format(dMonthly));

}

}

I simply need to incorporate what you've helped me with as well as what I've completed, and apply it somehow within this code.  This piece compiles nicely and I would like for you to run it so that you can see what it looks like and I think after doing so, you will see what I meant by the interest rate and term of the loan.
0

LVL 10

Expert Comment

ID: 17131511
do you mean to say that you want to display the monthly status only for 30 year loan..??

if so, you can change the fiirst code to get that

>> for (int i = 0; i < 3; i++) {

>>            //Call the method
>>            double payment = calPayment(monthsMonthlyRt[1][i], monthsMonthlyRt[0][i], mortgage);

set i = 2, it will do for 30 year loan with 5.75%
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be uâ€¦
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how â€¦
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Downâ€¦
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Booleâ€¦
###### Suggested Courses
Course of the Month12 days, 20 hours left to enroll

#### 777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.