如何在java中格式化输出控制台列?
我制作了一个创建发票的程序,但是当它涉及到数千个数字时,输出并不整洁,并且破坏了一切。我如何解决这个问题,使程序的列与这样的数字更加对齐?这是我用来创建程序的代码。如果有人能帮忙,那就太好了 这是一个主要的方法如何在java中格式化输出控制台列?,java,format,invoice,Java,Format,Invoice,我制作了一个创建发票的程序,但是当它涉及到数千个数字时,输出并不整洁,并且破坏了一切。我如何解决这个问题,使程序的列与这样的数字更加对齐?这是我用来创建程序的代码。如果有人能帮忙,那就太好了 这是一个主要的方法 public class InvoicePrinter { public static void main(String[] args) { Address samsAddress=new Address("Sam's Small Appliances", "100 Main
public class InvoicePrinter
{
public static void main(String[] args)
{
Address samsAddress=new Address("Sam's Small Appliances", "100 Main
Street", "Anytown", "CA", "98765");
Invoice samsInvoice =new Invoice(samsAddress);
samsInvoice.add(new Product("Toaster", 29.95),3);
samsInvoice.add(new Product("Hair Dryer", 24.95),1);
samsInvoice.add(new Product("Car Vacuum",19.99),2);
samsInvoice.add(new Product("Nano Parts",100000),1);
samsInvoice.addSimple(new Product("Shipping",5.00));
System.out.println(samsInvoice.format());
}
}
这些是该计划运行所需的其他计划
import java.util.ArrayList;
public class Invoice
{
public Invoice(Address anAddress)
{
items=new ArrayList<LineItem>();
billingAddress=anAddress;
simpleItems= new ArrayList<SimpleLineItem>();
}
public void addSimple(Product aProduct)
{
SimpleLineItem anItem= new SimpleLineItem(aProduct);
simpleItems.add(anItem);
}
public void add(Product aProduct, int quantity)
{
LineItem anItem=new LineItem(aProduct,quantity);
items.add(anItem);
}
public String format()
{
String r=" I N V O I C E\n\n"+billingAddress.format()+String.format("\n\n%-30s%8s%5s%8s\n","Description", "Price","Qty","Total");
for(LineItem i:items)
{
r=r+i.format()+"\n";
}
for(SimpleLineItem j:simpleItems)
{
r=r+j.format() + "\n";
}
r = r + String.format("\nAMOUNT DUE: $%8.2f", getAmountDue());
return r;
}
public double getAmountDue()
{
double amountDue = 0;
for (LineItem i : items)
{
amountDue = amountDue + i.getTotalPrice();
}
for(SimpleLineItem j:simpleItems)
{
amountDue = amountDue + j.getPrice();
}
return amountDue;
}
private Address billingAddress;
private ArrayList<LineItem> items;
private ArrayList<SimpleLineItem> simpleItems;
}
另一个
public class SimpleLineItem
{
public SimpleLineItem(Product aProduct)
{
theProduct=aProduct;
}
public double getPrice()
{
return theProduct.getPrice();
}
public String format()
{
return String.format("%-30s" +" " + "%8.2f",
theProduct.getDescription(), theProduct.getPrice());
}
private Product theProduct;
}
再来两个
public class Product
{
public Product(String aDescription,double aPrice)
{
description = aDescription;
price = aPrice;
}
public String getDescription()
{
return description;
}
public double getPrice()
{
return price;
}
private String description;
private double price;
}
最后一个
public class Address
{
public Address(String aName, String aStreet, String aCity, String
aState,String aZip)
{
name = aName;
street = aStreet;
city = aCity;
state = aState;
zip = aZip;
}
public String format()
{
return name + "\n" + street + "\n" + city + ", " + state + " " + zip;
}
private String name;
private String street;
private String city;
private String state;
private String zip;
}
因此,基本上,在打印出所有内容之前,无法确定数字列的总长度时,就会发生这种情况。为此,您需要将数字列的长度设置为最长的数字,或者在您的情况下设置为price length,并正确证明所有数字。因此,您需要将所有数字添加到一个数组中,并通过循环找到最长的数字 也许您可以在System.out.format和DecimalFormat类上查看Oracle的javadocs
我试图运行您的代码,并在线程“main”java.util.UnknownFormatConversionException:Conversion=''中抛出一个异常:异常,与int数组类似?我该怎么做呢?不,你使用价格,所以把它们放到一个双数组中。在打印整个表之前,循环遍历此数组并获取数字的最大字符长度。为列值创建必要的缩进
public class Address
{
public Address(String aName, String aStreet, String aCity, String
aState,String aZip)
{
name = aName;
street = aStreet;
city = aCity;
state = aState;
zip = aZip;
}
public String format()
{
return name + "\n" + street + "\n" + city + ", " + state + " " + zip;
}
private String name;
private String street;
private String city;
private String state;
private String zip;
}