简体   繁体   English

Java While-Loop问题

[英]Java While-Loop issue

I am trying to read a .txt file which contains this 我正在尝试读取包含此内容的.txt文件

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. 它的作用是在名称,数量,价格,总计中添加四列,并从txt文件中读取它们。 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 . 您永远不会重新分配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 ... 您不会在while循环中读取任何行...

You probably missed out saying: 您可能错过了说:

line = in.nextLine();

towards the end of the loop. 在循环的尽头。

Move the line assignment under the while condition. 在while条件下移动线路分配。

      String line = in.nextLine();
         while(in.hasNextLine()){

change to 改成

      while(in.hasNextLine()){
         String line = in.nextLine();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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