Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# Problem with loop initialization

Posted on 2004-09-14
Medium Priority
248 Views
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
Question by:nihlcat
[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
• 3
• 2

LVL 14

Expert Comment

ID: 12058259
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

LVL 14

Accepted Solution

sudhakar_koundinya earned 1000 total points
ID: 12058286
Small correction

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

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

0

LVL 7

Expert Comment

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

LVL 7

Expert Comment

ID: 12058353
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

LVL 7

Expert Comment

ID: 12060055
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

LVL 6

Author Comment

ID: 12064712
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

## Featured Post

Question has a verified solution.

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

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
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…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
###### Suggested Courses
Course of the Month5 days, 15 hours left to enroll