I'm taking Elementary Programming and I'm trying to get this code to work, and I can only use the first 3 chapters worth of the Java Foundations book, and the book is very complicated and unclear on this part. I can't even tell you if I'm approaching this the right way, but I've been working on it for over a week now and just can't get it.
This is supposed to let the user input the houses cost, tax rate over 5 years, and fuel rate over 5 years for 3 houses, then print them in a side by side table across 4 lines.
import java.util.Scanner;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class houseCost {
public static void main(String[] args)
{
double costHouse1, costHouse2, costHouse3, fuelHouse1, fuelHouse2, fuelHouse3, finalHouse1, finalHouse2, finalHouse3, finalFuel1, finalFuel2, finalFuel3, finalTax1, finalTax2, finalTax3, taxHouse1, taxHouse2, taxHouse3;
{
Scanner scan = new Scanner(System.in);
NumberFormat fmt1, fmt2, fmt3 = NumberFormat.getCurrencyInstance();
System.out.print("Enter the value of the first house:");
costHouse1 = scan.nextDouble();
System.out.print("Enter the fuel cost for the first house:");
fuelHouse1 = scan.nextDouble();
System.out.print("Enter the tax rate of the first house:");
taxHouse1 = scan.nextDouble();
System.out.print("Enter the value of the second house:");
costHouse2 = scan.nextDouble();
System.out.print("Enter the fuel cost of the second house:");
fuelHouse2 = scan.nextDouble();
System.out.print("Enter the tax rate of the second house:");
taxHouse2 = scan.nextDouble();
System.out.print("Enter the value of the third house:");
costHouse3 = scan.nextDouble();
System.out.print("Enter the fuel cost of the third house:");
fuelHouse3 = scan.nextDouble();
System.out.print("Enter the tax rate of the third house:");
taxHouse3 = scan.nextDouble();
finalTax1 = ((costHouse1 * taxHouse1) * 5);
finalTax2 = ((costHouse2 * taxHouse2) * 5);
finalTax3 = ((costHouse3 * taxHouse3) * 5);
finalFuel1 = (fuelHouse1 * 5);
finalFuel2 = (fuelHouse2 * 5);
finalFuel3 = (fuelHouse3 * 5);
finalHouse1 = costHouse1 + finalTax1 + finalFuel1;
finalHouse2 = costHouse2 + finalTax2 + finalFuel2;
finalHouse3 = costHouse3 + finalTax3 + finalFuel3;
System.out.printf("Initial House Cost\tAnnual Fuel Cost\tTaxes\t\tTotal Cost\n");
System.out.printf("\t%5d\t\t\t%5d\t\t%5d\t\t%5d\n", costHouse1, finalFuel1, finalTax1, finalHouse1);
System.out.printf("\t%5d\t\t\t%5d\t\t%5d\t\t%5d\n", costHouse2, finalFuel2, finalTax2, finalHouse2);
System.out.printf("\t%5d\t\t\t%5d\t\t%5d\t\t%5d\n", costHouse3, finalFuel3, finalTax3, finalHouse3);
}}}
If I run the program as is (or using DecimalFormat as opposed to NumberFormat), I can enter all the numbers and as soon as the 9th is entered, I get
"Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double at java.base/java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4442) at java.base/java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2963) at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2918) at java.base/java.util.Formatter.format(Formatter.java:2689) at java.base/java.io.PrintStream.format(PrintStream.java:1209) at java.base/java.io.PrintStream.printf(PrintStream.java:1105) at houseCost.main(houseCost.java:74)"
What I have read up on is that the NumberFormat and DecimalFormat are not variables to store data, but how to format it. I MUST use one or both of these in the project. I also have to format the output to look like a table which I think I did right with the printf.
I keep getting differing errors seen below. Where the variable initialization comes in is if I switch the bottom lines of code to something like this:
"
System.out.printf("\t%5d\t\t\t%5d\t\t%5d\t\t%5d\n", costHouse1, finalFuel1, finalTax1, fmt1.format(finalHouse1));
"
So, the ultimate question is, how do I resolve the error and take all the inputted numbers, put them through their calculations, and output them in ("0.##") format? Am I close? Have I really bothced this?
Thanks for your help!