• Status: Solved
• Priority: Medium
• Security: Public
• Views: 255

# Problem with loop initialization

I am almost finished with my Java homework, the 'classic' mortgage amortization.  It runs fairly well except I can't figure out how to stop the first month from displaying all zeros.  It should be starting with the data displayed in week 2...

What am I doing wrong?

//Authors Name:  Tom Pitts
//Assignment:    POS 406: Workshop 3
//Creation Date: September 11, 2004
//Due Date:      September 15, 2004

import java.lang.Math;                  //Import math class
import java.text.DecimalFormat;      //Import decimal formatting class

class POS406_W3_TRP { //Declare Class
public static void main(String[] arguments) {
double rate = .0575;  //Interest rate in decimal format
double principle = 200000;  //Amount of loan
double term = 360;      //Term of loan in months
double monthlyRate = (rate/12);     //Monthly interest rate = .0575/12

//Loan Overview Output
System.out.println("Name:         Tom Pitts");
System.out.println("Assignment:   Workshop 2");
System.out.println("________________________ \n");
System.out.println("Principle       : \$" + principle);
System.out.println("Interest Rate   : " + rate * 100 + "%");
System.out.println("# of Payments   : " + term);

/*Mortgage Payment Formula provided by Instructor is:
Principal * rate / ( 1 - (1 + rate)^ -number of payments )*/

double payments = (principle * monthlyRate) /  (1- Math.pow((1 + monthlyRate), -term));
DecimalFormat myVar = new DecimalFormat("\$###,##0.00");
String myoutput = myVar.format(payments);
System.out.println("Monthly Payment : " + myoutput + "\n");

try
{System.out.println("Press Enter to Continue");
}
catch(Exception error)
{}

int monthCounter=1;
double loanBalance=0.0;
double interestPaid=0.0;
double principlePayment=0.0;

for (;monthCounter <= 360; monthCounter++) { //Intrement monthCounter by 1 each loop
DecimalFormat balanceVar = new DecimalFormat("\$###,##0.00");
String decimal_Loan_Balance = balanceVar.format(loanBalance);
String interestPaid_output = balanceVar.format(interestPaid);
String principlePayment_output = balanceVar.format(principlePayment);

if(monthCounter ==1){
interestPaid= principle * monthlyRate;
loanBalance= principle - (payments - interestPaid);
}
else{
interestPaid= loanBalance * monthlyRate;
loanBalance= loanBalance - (payments - interestPaid);
}

principlePayment = payments - interestPaid;

System.out.println(monthCounter + "\t" + principlePayment_output + "\t\t"+ interestPaid_output + "\t\t" + decimal_Loan_Balance);

if(monthCounter % 12==0)

try
{System.out.print("Press Enter to Continue");
}
catch(Exception error)
{}
}
}
}
0
nihlcat
• 3
• 2
1 Solution

Commented:
It should be something like this

//Authors Name:  Tom Pitts
//Assignment:    POS 406: Workshop 3
//Creation Date: September 11, 2004
//Due Date:      September 15, 2004

import java.lang.Math;               //Import math class
import java.text.DecimalFormat;     //Import decimal formatting class

class POS406_W3_TRP { //Declare Class
public static void main(String[] arguments) {
double rate = .0575;  //Interest rate in decimal format
double principle = 200000;  //Amount of loan
double term = 360;     //Term of loan in months
double monthlyRate = (rate/12);     //Monthly interest rate = .0575/12

//Loan Overview Output
System.out.println("Name:         Tom Pitts");
System.out.println("Assignment:   Workshop 2");
System.out.println("________________________ \n");
System.out.println("Principle       : \$" + principle);
System.out.println("Interest Rate   : " + rate * 100 + "%");
System.out.println("# of Payments   : " + term);

/*Mortgage Payment Formula provided by Instructor is:
Principal * rate / ( 1 - (1 + rate)^ -number of payments )*/

double payments = (principle * monthlyRate) /  (1- Math.pow((1 + monthlyRate), -term));
DecimalFormat myVar = new DecimalFormat("\$###,##0.00");
String myoutput = myVar.format(payments);
System.out.println("Monthly Payment : " + myoutput + "\n");

try
{System.out.println("Press Enter to Continue");
}
catch(Exception error)
{}

int monthCounter=1;
double loanBalance=0.0;
double interestPaid=0.0;
double principlePayment=0.0;

for (;monthCounter <= 360; monthCounter++) { //Intrement monthCounter by 1 each loop
DecimalFormat balanceVar = new DecimalFormat("\$###,##0.00");
String decimal_Loan_Balance = balanceVar.format(loanBalance);
String interestPaid_output = balanceVar.format(interestPaid);
String principlePayment_output = balanceVar.format(principlePayment);

if(monthCounter ==1){
interestPaid= principle * monthlyRate;
loanBalance= principle - (payments - interestPaid);
}
else{
interestPaid= loanBalance * monthlyRate;
loanBalance= loanBalance - (payments - interestPaid);
}

principlePayment = payments - interestPaid;
if(monthCounter >1)
System.out.println((monthCounter-1) + "\t" + principlePayment_output + "\t\t"+ interestPaid_output + "\t\t" + decimal_Loan_Balance);

if((monthCounter-1) % 12==0)

try
{System.out.print("Press Enter to Continue");
}
catch(Exception error)
{}
}
}
}
0

Commented:
Small correction

>>for (;monthCounter <= 360; monthCounter++) { //Intrement monthCounter by 1 each loop

for (;monthCounter <= 361; monthCounter++) { //Intrement monthCounter by 1 each loop

0

Commented:
Look at where you format interestPaid_output and principlePayment_output - before you compute the source values.
0

Commented:
Just to be clear - step through with Eclipse debugger.  You are computing the payment and interest correctly, but you have already computed principlePayment_output and interestPaid_output from the values of interest and principle as they were initialized (zero).  Just need to move a few lines...

I wish other homework questions were like this - honest, and looking for debugging help, rather than "do it for me".
0

Commented:
Sudhakar's solution works, but I think it is a kludge.  Instead of printing out.

System.out.println((monthCounter-1) + "\t" + principlePayment_output + "\t\t"+ interestPaid_output + "\t\t" + decimal_Loan_Balance);

You should move the assignments for those variables after interestPaid and loan_balance have been computed.  Then your program will be more "rational".

Follow the logic - your teacher should give some points off for this crude workaround - it would be harder to maintain and understand.
0

Author Commented:
Ok, understood.  I haven't turned it in yet, so I will review this.  I wanted to clean up the code anyway.  THANK YOU for your opinions!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.