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

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");
      System.in.read();
      System.in.read();
      }
      catch(Exception error)
      {}
      
            System.out.print("\tPrincipal\tInterest\tLoan\n"); //Amortization Headings
            System.out.println("Months\tPayment\t\tPayment\t\tBalance\n");//Amortization Headings
            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");
      System.in.read();
      System.in.read();
      }
      catch(Exception error)
      {}
      }
 }
 }
0
nihlcat
Asked:
nihlcat
  • 3
  • 2
1 Solution
 
sudhakar_koundinyaCommented:
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");
     System.in.read();
     System.in.read();
     }
     catch(Exception error)
     {}
     
          System.out.print("\tPrincipal\tInterest\tLoan\n"); //Amortization Headings
          System.out.println("Months\tPayment\t\tPayment\t\tBalance\n");//Amortization Headings
          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");
     System.in.read();
     System.in.read();
     }
     catch(Exception error)
     {}
     }
 }
 }
0
 
sudhakar_koundinyaCommented:
Small correction

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

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

0
 
bvanderveenCommented:
Look at where you format interestPaid_output and principlePayment_output - before you compute the source values.
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
bvanderveenCommented:
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
 
bvanderveenCommented:
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
 
nihlcatAuthor 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.

Join & Write a Comment

Featured Post

Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now