简体   繁体   中英

Java While-Loop issue

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM