This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Arrays Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Arrays" Watch "Arrays" New topic
Author

Arrays

Dushayne Stevenson
Greenhorn

Joined: Feb 29, 2008
Posts: 6
I am working on a mortgage calculation program and I need assistance with calling arrays.

my instructions are this:

Declare four one dimensional arrays to store three mortgages. Use the first array to store the amounts, the second one for Interest Rates, the third one for Years/months, and the last one to store the calculated payment for each loan.

Call a method to fill these arrays. You need to send the arrays to the method to get them filled. Call a second method to print the values from these arrays. Also, calculate and print the total payment for each mortgage. You need to send the arrays to the method for printing. Use a loop to print the values from the three arrays.

Fill Array Method

Accept the arrays as parameters and ask the user to input the values for each mortgage. Calculate the monthly payment for each mortgage and store it in the payment array. You need a loop here as we are dealing with three mortgages. Please check the output below to see the spacing between each loan.

Print Array Method

Accept the arrays as parameters and print the output as shown. Make sure the output is formatted.

and my code looks like this:

*/

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


public class MultipleLoans_2

{
public static void main(String[] args) throws IOException //Stores the exception rule

{
//declare the array using the following data types
double loanAmt[]=new double [3];//intializes loan amount array with assigned new double variable
double yearRate[]=new double [3];//intializes year rate array with assigned new double variable
double monthlyPmt[]=new double [3];//intializes monthly payment array with assigned new double variable
double numMonths []=new double [3];//intializes number of months array with assigned new double variable
double newInterest []=new double [3];//intializes new interest array with assigned new double variable
double totPmt []=new double [3];//initialize new total payment array with assigned new double variable
int loanTerm[]=new int [3];//intializes loan term with assigned new integer
int i;//declare function variable

DecimalFormat twoDigits = new DecimalFormat ("0.00");//Formats any specified amount with proper digits
String answer;//declare string variable named answer
BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in));//


for (i=0; i<3; i++)//creates a counter controlled loop
{
try//Note can not have a try statement without a finally or
{
System.out.print("Please enter the loan amount :$ ");//gets input from user
answer = dataIn.readLine();
loanAmt[i] = Double.parseDouble(answer);

System.out.print("What is the yearly interest rate(Eg. 5.0): ");
answer = dataIn.readLine();
yearRate[i] = Double.parseDouble(answer);

System.out.print("Enter the term in years: ");
answer = dataIn.readLine();
loanTerm[i] = Integer.parseInt(answer);

totPmt[i] = Double.parseDouble(answer);
System.out.print("\n");

while(loanAmt[i] <=0 && yearRate[i] <=0 && loanTerm[i] <=0);
throw new NumberFormatException();

} // Closes try statement

/*There are multiple components that must be analyzed in the above portion coding. The for loop loop creates a counter loop that will allow the user to the
loan amount,the yearly interest rate, and the loan term. The i=0 starts the loop, the i<2 is the stop point and the i++
increments the amount of times this particular portion of the program. The try gets user input including exceptions Inputs
are required from user. Program catches number format exception and catches any value that is negative. it
stores the error but continues through program for efficiency.
*/

catch (NumberFormatException nfe) //catches any incorrect information entered in the
{
System.out.print("\n");
System.out.println(" Input value not understood, Please input correct amount!");
System.out.print("\n");
System.out.print("\n");
}// This closes the Error output statement


}//This concludes the for loop


for (i=0; i<3; i++)//creates a new counter loop
//The formulas below Implement the calculation formulas to determine monthly payments
{
newInterest[i] = ((yearRate[i]/100)/12); //Convert interest rate to decimal

numMonths[i] = loanTerm[i]*12; // Convert yearly terms into months

monthlyPmt[i] = loanAmt[i]/((1/newInterest[i])-(1/(newInterest[i]*Math.pow(1+newInterest[i], numMonths[i]))));
//This formula calculates monthly payments for the mortgage plan

totPmt[i] = numMonths[i]*monthlyPmt[i];/* calculates the total payments based on
the number of months and monthly payments.*/

} // Needed to conclude this portion of the loop statement

System.out.print(" Loan\tRate\tMonths\tPayment\t\tTotpayment");
System.out.print("\n");
System.out.print("\n");

for (i=0; i<3; i++)//creates another counter loop statement
{

System.out.print("\n");
System.out.print(twoDigits.format(loanAmt[i])+"\t");//prints the loan amount and sends array specified row and column
System.out.print(twoDigits.format(yearRate[i])+"\t");// prints the year interest rate and sends array to its specified row and column
System.out.print(twoDigits.format(numMonths[i])+"\t");//prints the number of months for payment and sends array in its specified row and column
System.out.print(twoDigits.format(monthlyPmt[i])+ "\t\t");//prints the monthly payments and sends array its specified row and column
System.out.print(twoDigits.format(totPmt[i]));//prints the tot payment amount and sends array to its specified row and column
System.out.print("\n");

} // This concludes the for loop statement
}//Closes the main public static
}//Ends the public class file and ends program

am I addressing the instructions or no


Dushayne Stevenson
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38075
    
  22
Welcome to the Ranch.

Please use "code" tags round quoted code; it makes it much easier to read.

I am pleased to see nice commenting, including the //end comments.
Have you been told to use old-fashioned input methods rather than the Scanner class?
Have you been told to use old-fashioned output formatting rather than the printf method of PrintStream?
The real problem you have got is your "while" loop. You have no body to it. Lots of people make this mistake, putting a ; after a while or an if. Sort that out and your app will work nicely. I can see no need for you to throw a NumberFormatException yourself; if there is an incorrect number that will happen automatically. Don't change the try and catch, however.

You are not displaying the payment correctly; I haven't checked whether you have calculated it, but the total payment column suggests that you have in fact calculated.
Use System.out.println(); rather than System.out.print("\n");
Put an additional tab in the top line of your output to improve formatting.
Look in a book for the way to loop through an array with
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 38075
    
  22
But you haven't read the instructions. It says "Send the arrays to the methods to be filled." You will lose marks hand over fist. Please check that your app actually fulfills the instructions you have been given.
Dushayne Stevenson
Greenhorn

Joined: Feb 29, 2008
Posts: 6
I know that the instructions call for arrays to be initialized and to use methods to call the arrays. I have read up on this and I am getting very little input from my instructor on this. I could use some help formulating my program to reflect the instructions. My assignment is due tomarrow and I am about to jump. ARRRRRRGGGGG I am really starting to like Java but it can make you pull your hair out
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Start with this: What would a method look like that takes an array as a parameter?


"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer
sscce.org
Dushayne Stevenson
Greenhorn

Joined: Feb 29, 2008
Posts: 6
Humm let me see,

getArray();
marc weber
Sheriff

Joined: Aug 31, 2004
Posts: 11343

Consider the main method you're using.

  • "public" is the access modifier.
  • "static" associates the method with the class (rather than an instance of the class).
  • "void" is the return type (meaning that nothing is returned).
  • "main" is the method name.
  • "String[]" is the type of the parameter (an array of Strings).
  • "args" is the name of the parameter (the String array).
  • "//body" is what the method does.
  • So can you pattern a method after "main" to take an array that you want to process?
    Dushayne Stevenson
    Greenhorn

    Joined: Feb 29, 2008
    Posts: 6
    I compile my code and I get one error that I do not understand

    class,interface, or enum expected
    marc weber
    Sheriff

    Joined: Aug 31, 2004
    Posts: 11343

    Can you post the code?
    Dushayne Stevenson
    Greenhorn

    Joined: Feb 29, 2008
    Posts: 6
    import java.io.*;
    import java.text.*;


    public class MultipleLoans_2

    {

    public static void main(String[] args) throws IOException //Stores the exception rule
    {

    //declare the array using the following data types
    double loanAmt[]=new double [3];//intializes loan amount array with assigned new double variable
    double yearRate[]=new double [3];//intializes year rate array with assigned new double variable
    double monthlyPmt[]=new double [3];//intializes monthly payment array with assigned new double variable
    double numMonths[]=new double [3];//intializes number of months array with assigned new double variable
    double newInterest[]=new double [3];//intializes new interest array with assigned new double variable
    double totPmt[]=new double [3];//initialize new total payment array with assigned new double variable
    int loanTerm[]=new int [3];//intializes loan term with assigned new integer
    int i;//declare function variable

    String answer;//declare string variable named answer

    DecimalFormat twoDigits = new DecimalFormat ("0.00");//Formats any specified amount with proper digits
    BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in));//

    }

    {
    getUserInput(loanAmt,yearRate,loanTerm);// call method for array for user input
    printValues(loanAmt,yearRate,monthlyPmt,numMonths,newInterest,totPmt,loanTerm);// call method for array print values
    }

    public static void getUserInput(double loanAmt[],double yearRte[],int loanTerm[])//fills array method
    {

    for (i=0; i<3; i++)//creates a counter controlled loop
    {
    try//Note can not have a try statement without a finally or
    {
    System.out.print("Please enter the loan amount :$ ");//gets input from user
    answer = dataIn.readLine();
    loanAmt[i] = Double.parseDouble(answer);

    System.out.print("What is the yearly interest rate(Eg. 5.0): ");
    answer = dataIn.readLine();
    yearRate[i] = Double.parseDouble(answer);

    System.out.print("Enter the term in years: ");
    answer = dataIn.readLine();
    loanTerm[i] = Integer.parseInt(answer);

    totPmt[i] = Double.parseDouble(answer);
    System.out.println();

    while(loanAmt[i] <=0 && yearRate[i] <=0 && loanTerm[i] <=0);

    } // Closes try statement

    catch (NumberFormatException nfe) //catches any incorrect information entered in the
    {
    System.out.println();
    System.out.println(" Input value not understood, Please input correct amount!");
    System.out.println();
    System.out.println();
    }// This closes the Error output statement


    }//This concludes the for loop
    return;
    }
    //print array method
    public static void printValues(double loanAmt[],double yearRate[],double monthlyPmt[],double numMonths[],
    double newInterest[],double totPmt[],int loanTerm[])
    {

    for (i=0; i<3; i++)//creates a new counter loop
    //The formulas below Implement the calculation formulas to determine monthly payments
    {
    newInterest[i] = ((yearRate[i]/100)/12); //Convert interest rate to decimal

    numMonths[i] = loanTerm[i]*12; // Convert yearly terms into months

    monthlyPmt[i] = loanAmt[i]/((1/newInterest[i])-(1/(newInterest[i]*Math.pow(1+newInterest[i], numMonths[i]))));
    //This formula calculates monthly payments for the mortgage plan

    totPmt[i] = numMonths[i]*monthlyPmt[i];/* calculates the total payments based on
    the number of months and monthly payments.*/

    } // Needed to conclude this portion of the loop statement

    System.out.print(" Loan\tRate\tMonths\tPayment\t\tTotpayment");
    System.out.println();
    System.out.println();

    for (i=0; i<3; i++)//creates another counter loop statement
    {

    System.out.println();
    System.out.print(twoDigits.format(loanAmt[i])+"\t");//prints the loan amount and sends array specified row and column
    System.out.print(twoDigits.format(yearRate[i])+"\t");// prints the year interest rate and sends array to its specified row and column
    System.out.print(twoDigits.format(numMonths[i])+"\t");//prints the number of months for payment and sends array in its specified row and column
    System.out.print(twoDigits.format(monthlyPmt[i])+ "\t\t");//prints the monthly payments and sends array its specified row and column
    System.out.print(twoDigits.format(totPmt[i]));//prints the tot payment amount and sends array to its specified row and column
    System.out.println();


    } // This concludes the for loop statement
    return;
    }
    }//Closes the main public static
    }//Ends the public class file and ends program
    Dushayne Stevenson
    Greenhorn

    Joined: Feb 29, 2008
    Posts: 6
    i appreciate all of the advice, I am approaching deadlines with this program and I just need to get it to compile already.
    marc weber
    Sheriff

    Joined: Aug 31, 2004
    Posts: 11343

    Basically, your braces are not matching up. It would be a lot easier to see this with proper indentation and Code Tags.

    The compiler thinks the final closing brace at the end is an extra. So the compiler thinks you're done defining your class and is expecting you to start defining another class, interface, or enum instead of tossing in an extra brace. But the real cause of this problem appears to be much earlier in the code, just after declaring your variables...

    When you fix this, you will find more serious problems in the form of 52 compiler errors. The main reason for these is variable scope. You are defining a number of variables inside the main method, which means that their scope is limited to the main method body. Outside of main, none of these variables have any meaning. Instead of being local to the method, you probably want these variables to be instance variables, defined outside of the main method.

    But this is going to lead to other problems. Your methods are static, so they will not be able to reference non-static (instance) variables. My suggestion is to remove the "static" modifier from these methods. When you do that, you won't be able to call them from main without creating an instance. So inside of main, you should create a new instance, like...

    MultipleLoans_2 myLoans = new MultipleLoans_2();

    Then use that instance to call the methods...

    myLoans.getUserInput(...);
    myLoans.printValues(...);

    After that, your getUserInput method might throw an IOException, which needs to be caught or declared.

    Then your code will compile and run without error. (I didn't check the logic, but the output looks about right -- although you probably won't like the formatting.)
    [ March 02, 2008: Message edited by: marc weber ]
     
    Don't get me started about those stupid light bulbs.
     
    subject: Arrays
     
    Similar Threads
    last week of class last assignment. Any help is appreciated.
    I need to have my program take information from text file Plus my pie chart is in wrong place
    Help with errors again
    help me pause and continue my program
    One error in code..not understanding what it tells me. Code works it is on line 55.