我正在尝试使我的程序打印出包含其名称,数量和价格的三项账单。一切正常,我需要做的是如何计算价格和总数,以使每次小数都排成一行,无论数字多少。这是我的代码
import java.util.Scanner;
class AssignmentOneTest {
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
// System.out.printf("$%4.2f for each %s ", price, item);
// System.out.printf("\nThe total is: $%4.2f ", total);
//process for item one
System.out.println("Please enter in your first item");
String item = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity = Integer.parseInt(kb.nextLine());
System.out.println("Please enter in the price of your item");
double price = Double.parseDouble(kb.nextLine());
//process for item two
System.out.println("Please enter in your second item");
String item2 = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity2 = Integer.parseInt(kb.nextLine());
System.out.print("Please enter in the price of your item");
double price2 =Double.parseDouble(kb.nextLine());
double total2 = quantity2*price2;
// System.out.printf("$%4.2f for each %s ", price2, item2);
// System.out.printf("\nThe total is: $%4.2f ", total2);
//process for item three
System.out.println("Please enter in your third item");
String item3 = kb.nextLine();
System.out.println("Please enter the quantity for this item");
int quantity3 = Integer.parseInt(kb.nextLine());
System.out.println("Please enter in the price of your item");
double price3 = Double.parseDouble(kb.nextLine());
double total3 = quantity3*price3;
// System.out.printf("$%4.2f for each %s ", price3, item3);
// System.out.printf("\nThe total is: $%4.2f ", total3);
double total = quantity*price;
double grandTotal = total + total2 + total3;
double salesTax = grandTotal*(.0625);
double grandTotalTaxed = grandTotal + salesTax;
String amount = "Quantity";
String amount1 = "Price";
String amount2 = "Total";
String taxSign = "%";
System.out.printf("\nYour bill: ");
System.out.printf("\n\nItem");
System.out.printf("%28s %11s %11s", "Quantity", "Price", "Total");
//complete item one format
System.out.printf("\n%-30s", item);
System.out.printf("%-10d", (int)quantity);
System.out.printf("%-10.2f", (float)price);
System.out.printf(" " + "%-10.2f", (float)total);
//complete item two format
System.out.printf("\n%-30s", item2);
System.out.printf("%-10d", (int)quantity2);
System.out.printf("%-10.2f", (float)price2);
System.out.printf(" " + "%-10.2f", (float)total2);
//complete item three format
System.out.printf("\n%-30s", item3);
System.out.printf("%-10d", (int)quantity3);
System.out.printf("%-10.2f", (float)price3);
System.out.printf(" " + "%-10.2f", (float)total3);
System.out.printf("\n\n\nSubtotal %47.2f", grandTotal);
System.out.printf("\n6.25 %s sales tax %39.2f", taxSign, salesTax);
System.out.printf("\nTotal %50.2f", grandTotalTaxed);
}
问题是,每次价格相同时,所有内容都会排队,但可以说我为两个不同的商品输入了50.00的价格和2.50的价格,那么商品的价格和小数点总和都不全部对齐, 请帮忙。
最佳答案
我发现如果在一对匹配的函数中进行输出,将标题和列对齐很容易,一个用于标题,另一个用于数据,例如:
public static void prLine (String item, int quantity, double price, double total) {
System.out.printf("\n%-20.20s %10d %10.2f %10.2f", item, quantity,
price, total);
}
public static void prTitles () {
System.out.printf("\n%-20s %10s %10s %10s", "Item", "Quantity",
"Price", "Total");
}
您会看到,以这种方式很容易获得很好的字段宽度。然后,我可以如下使用这些功能:
prTitles ();
prLine (item,quantity,price,total);
prLine (item2,quantity2,price2,total2);
prLine (item3,quantity3,price3,total3);
...,然后以我认为您要查找的样式获得排队的输出:
Your bill:
Item Quantity Price Total
first 1 1.50 1.50
second 10 12.50 125.00
third 456 322.00 146832.00
将输出代码放入函数中还可以大大减少
main()
函数中的代码行数。