使用printf格式化表格

时间:2017-11-20 17:00:55

标签: java arraylist printf

我尝试使用printf输出格式化字符串。问题涉及银行系统。我有一个Transaction类型的ArrayList,它包含id,事务量,确定是存款还是取款的字符串,以及帐户中的余额。

首先,程序打印4列,没有问题

System.out.printf("%-20s%-20s%-20s%s\n","Transaction","Withdrawal","Deposit", "Balance");

然后我尝试遍历ArrayList并打印出每个事务的信息。 if语句用于确定正在执行的事务,然后我尝试将该数量与正确的列对齐,具体取决于它是存款还是取款。

for(int i= 0; i < d.size(); i++) {
            if(d.get(i).type.equals("Deposit")) {
                System.out.printf("%-20d%-40d%-20d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);
            }else {
                System.out.printf("%-20d%-20d%-40d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);
            }
        }

它实际上似乎打印出第一行很棒:

Transaction         Withdrawal          Deposit             Balance
0                   7                                       1007     

然而,它会打印出一系列我无法理解的错误

  

线程中的异常&#34; main&#34; java.util.MissingFormatArgumentException:   格式说明符&#39;%d&#39;在java.util.Formatter.format(未知来源)at   java.io.PrintStream.format(未知来源)at   java.io.PrintStream.printf(未知来源)at   Account.printStatement(Account.java:87)at   Account.main(Account.java:43)

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这实际上意味着您有一个没有相应值的%d:

System.out.printf("%-20d%-40d%-20d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);

您有4个格式说明符和3个值。

%-20d
%-40d
%-20d
%d

值:

d.get(i).id
d.get(i).amount
d.get(i).balance