I am trying to read a .txt file which contains this
lollipops 10 0.50 5.00
dietsoda 3 1.25 3.75
chocolatebar 20 0.75 15.00
What it will do is make 4 columns one for name, quantity, price, total and read them from the txt file. Then calculate subtotal, sales tax and then total. I'm not sure how to calculate the subtotal since the total is always the last value which in this case is the total of the chocolate bar.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class CatalogTester
{
public static double SALESTAX = 0.0625;
public static void main(String[] args) throws FileNotFoundException
{
String name ="";
int quantity = 0;
double price =0;
double total = 0;
double subtotal = 0;
double tax = 0;
double total_all = 0;
File inFile = new File("Catalog.txt");
Scanner in = new Scanner(inFile);
System.out.printf("%-30s %-10s %-10s %-10s\n", "Item", "Quantity","Price", "Total");
System.out.println();
System.out.println("Expected:Item Quantity Price Total");
while(in.hasNext()){
name = in.next();
quantity = in.nextInt();
price = in.nextDouble();
total = in.nextDouble();
System.out.printf("%-30s %-10d %-10.2f %-10.2f\n", name, quantity, price, total);
}
in.close();
tax = subtotal * SALESTAX;
total_all = subtotal+tax;
System.out.println("Expected:lollipops 10 0.50 5.00");
System.out.printf("%-52s %-10.2f\n", "SubTotal", subtotal);
System.out.println("Expected:SubTotal 23.75");
System.out.printf("%-52s %-10.2f\n", SALESTAX * 100 + "% Sales Tax",tax);
System.out.println("Expected:6.25% Sales Tax 1.48");
System.out.printf("%-52s %-10.2f\n", "Total", total_all);
System.out.println("Expected:Total 25.23");
}
}
You never reassign line
. So, same first line is checked for everytime.
String line = in.nextLine();
while(in.hasNextLine()){
int i = 0;
while(!Character.isDigit(line.charAt(i))) {i++;} //<--- same line
To fix this:
String line = in.nextLine();
while(in.hasNextLine()){
int i = 0;
while(!Character.isDigit(line.charAt(i))) {i++;}
//code
line = in.nextLine(); //added
}
You don't read any line within your while
loop ...
You probably missed out saying:
line = in.nextLine();
towards the end of the loop.
Move the line assignment under the while condition.
String line = in.nextLine();
while(in.hasNextLine()){
change to
while(in.hasNextLine()){
String line = in.nextLine();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.