Question: Java question, I have marked in Bold my updates. However, the print summary isn't formatting correctly. If you perform 3 calculations, it should list the

Java question, I have marked in Bold my updates. However, the print summary isn't formatting correctly.

If you perform 3 calculations, it should list the results as such:

Inv/Mo. Rate Years Future Value

$100.00 8 10 $18,416.57

$125.00 8 10 $23,020.71

$150.00 8 10 $27,624.85

Using the Future Value App declare a variable at the beginning of the main method for a linked list that stores a string.

After the code calculates, formats, and displays the results for each calculation add code that formats a string with the results of the calculation and then stores the string in the linked list. I think I have this correct.

Finally, add code to display the elements in the link list at the console when the user indicates that the prgram should end. This code should retrieve the elements of the linked list in reverse order.

import java.util.*; import java.text.*;

public class FutureValueApp { public static void main(String[] args) { //create a linked list of type String LinkedList list = new LinkedList <> (); // display a welcome message System.out.println("Welcome to the Future Value Calculator"); System.out.println();

// perform 1 or more calculations Scanner sc = new Scanner(System.in); String choice = "y"; while (choice.equalsIgnoreCase("y")) {

// get the input from the user System.out.println("DATA ENTRY"); double monthlyInvestment = getDoubleWithinRange(sc, "Enter monthly investment: ", 0, 1000); double interestRate = getDoubleWithinRange(sc, "Enter yearly interest rate: ", 0, 30); int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100);

// calculate the future value double monthlyInterestRate = interestRate/12/100; int months = years * 12; double futureValue = calculateFutureValue( monthlyInvestment, monthlyInterestRate, months);

// get the currency and percent formatters NumberFormat currency = NumberFormat.getCurrencyInstance(); NumberFormat percent = NumberFormat.getPercentInstance(); percent.setMinimumFractionDigits(1);

// format the result as a single string String results = "Monthly investment:\t" + currency.format(monthlyInvestment) + " " + "Yearly interest rate:\t" + percent.format(interestRate/100) + " " + "Number of years:\t" + years + " " + "Future value:\t\t" + currency.format(futureValue) + " ";

// print the results System.out.println(); System.out.println("FORMATTED RESULTS"); System.out.println (results); list.add (results); // is this correct?

// see if the user wants to continue System.out.print("Continue? (y/n): "); choice = sc.next(); System.out.println(); } System.out.println("Inv/Mo.\tRate\tYears\tFuture Value"); while (!list.isEmpty()) { System.out.println (list.pollLast()); //I don't think I am calculating this correctly, since it doesn't display like the list above } }

public static double getDouble(Scanner sc, String prompt) { boolean isValid = false; double d = 0; while (isValid == false) { System.out.print(prompt); if (sc.hasNextDouble()) { d = sc.nextDouble(); isValid = true; } else { System.out.println("Error! Invalid decimal value. Try again."); } sc.nextLine(); // discard any other data entered on the line } return d; }

public static double getDoubleWithinRange(Scanner sc, String prompt, double min, double max) { double d = 0; boolean isValid = false; while (isValid == false) { d = getDouble(sc, prompt); if (d <= min) System.out.println( "Error! Number must be greater than " + min + "."); else if (d >= max) System.out.println( "Error! Number must be less than " + max + "."); else isValid = true; } return d; }

public static int getInt(Scanner sc, String prompt) { boolean isValidInt = false; int i = 0; while (isValidInt == false) { System.out.print(prompt); if (sc.hasNextInt()) { i = sc.nextInt(); isValidInt = true; } else { System.out.println("Error! Invalid integer value. Try again."); } sc.nextLine(); // discard any other data entered on the line } return i; }

public static int getIntWithinRange(Scanner sc, String prompt, int min, int max) { int i = 0; boolean isValid = false; while (isValid == false) { i = getInt(sc, prompt); if (i <= min) System.out.println( "Error! Number must be greater than " + min + "."); else if (i >= max) System.out.println( "Error! Number must be less than " + max + "."); else isValid = true; } return i; }

public static double calculateFutureValue(double monthlyInvestment, double monthlyInterestRate, int months) { double futureValue = 0; for (int i = 1; i <= months; i++) { futureValue = (futureValue + monthlyInvestment) * (1 + monthlyInterestRate); } return futureValue; } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!