This is my assignment:
Here are my questions:
- How can I fix this error:
Exception in thread ‘main’ java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1012) at java.lang.Double.parseDouble(Double.java:527) at extracredit.Main.readData(Main.java:72) at extracredit.Main.main(Main.java:27)
- Are there any other problems that you can see with this program?
Here’s my code so far:
import java.io.*; import javax.swing.JOptionPane; import java.util.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { String fname = 'data.txt'; //Read in the data file for use in the array String pass= JOptionPane.showInputDialog('Please enter the ' + 'password to continue:'); /*Have the user enter the password to access the file. */ checkPass(pass); // Verify that the password is correct before continuing. readData (fname); // Read data, print output and save output file. } private static void checkPass (String pass) { String password= 'INF260'; int passCount= 0; if (pass.equals(password)) { System.out.println('The password is correct. Continuing...'); } else { do { pass= JOptionPane.showInputDialog('Please re-enter the' + 'password:'); passCount++; } while (!pass.equals(password) && passCount < 2); if (!pass.equals(password)) { System.out.println('You have tried to enter the ' + 'password too many times. Exiting...'); System.exit(0); } else { System.out.println('The password is correct. Continuing...'); } } } public static void readData (String data) throws IOException{ FileReader inputData= new FileReader (data); BufferedReader findNum= new BufferedReader (inputData); String str= findNum.readLine (); int count=-1; int countNum= 0; double total= 0; double min= 0; double max= 0; double average= 0; FileWriter writeFile = new FileWriter('sales.txt'); PrintWriter printFile = new PrintWriter(writeFile); while (str != null) { double num= Double.parseDouble (str); if (count == 0){ countNum++; // counter of Reciepts to use } str = findNum.readLine(); } double [][] input = new double [countNum][10]; total= getCurrentTotal(input); /*This will get the total from the method getCurrentTotal.*/ min= getCurrentMin(input); /*This will get the minimum value from the method getCurrentMin.*/ max= getCurrentMax (input); /*This will get the maximum value from the method getCurrentMax.*/ average= (total / countNum); //Calculate the average. System.out.println('The List of Today's Sales:'); for (int row = 0; row < input.length; row++){ System.out.println (); System.out.println('Customer ' + row + '\t'); for (int column = 0; column < input[row].length; column++){ if (input [row].length < 10){ System.out.println(input[row][column] + '\t'); str = findNum.readLine(); } else{ System.out.println ('There are too many receipts' + ' for one Customer.\n'); System.exit (0); } } } System.out.println ('There are ' + countNum + 'receipts in the list.'); /*This will print the total of receipts in the list.*/ System.out.println ('The total of today's sales is $' + total); /* This will print the total of the sales for the day.*/ System.out.println ('The average of today's sales is $' + average); /* This will print the average sale total.*/ System.out.println ('The highest receipt is $' + max); /* This will print the highest sale.*/ System.out.println ('The lowest receipt is $' + min); /* This will print the lowest sale.*/ Date date = new Date(); System.out.println ('\n The current time is:' + date.toString()); /* This will print the current date and time */ } public static double getCurrentTotal (double [][] input){ double totalAmount = 0; for (int row = 0; row < input.length; row++){ for (int column = 0; column < input [row].length; column++){ totalAmount += input [row][column]; } } return totalAmount; } public static double getCurrentMin (double [][] input) { double currentMin = input[0][0]; for (int row = 0; row < input.length; row++){ for (int column = 0; column < input [row].length; column++){ if (currentMin > input[row][column]) currentMin = input[row][column]; } } return currentMin; } public static double getCurrentMax (double [][] input){ double currentMax = input[0][0]; for (int row = 0; row < input.length; row++){ for (int column = 0; column < input [row].length; column++){ if (currentMax < input[row][column]){ currentMax = input[row][column]; } } } return currentMax; } }
We have an incompatibility here.
All of these three should be the same data type.
You don’t have to. You have to READ from that file with the zeros in it.
I would recommend you write a method something like this:
public double[] readOneReceipt(BufferedReader reader);
This method should
With a java.io.FileWriter
The hardest bit of this IMO is the fact that you are told to store the data in a 2d array, but you don’t exactly what size to make the array until you’ve read the data. Which means that you either use a temporary dynamic structure, or read the file twice – once to find out how many receipts there are so that you can make the array, and then again to actually read the receipt data.