[英]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.