【问题标题】:Formatting table with printf使用 printf 格式化表格
【发布时间】:2017-11-20 17:00:55
【问题描述】:

我正在尝试使用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     

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

线程“主”java.util.MissingFormatArgumentException 中的异常: java.util.Formatter.format(Unknown Source) 中的格式说明符“%d” java.io.PrintStream.format(未知来源)在 java.io.PrintStream.printf(未知来源)在 Account.printStatement(Account.java:87) 在 Account.main(Account.java:43)

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

【问题讨论】:

  • 您缺少 printf 的一个参数
  • 为了提高可读性,请使用 for-each 循环:for (Transaction t : d),然后使用 t 而不是 d.get(i)

标签: java arraylist printf


【解决方案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

【讨论】:

  • @RAZ_Muh_Taz:是的,if else 子句现在也没有多大意义。第一个System.out.printf 应该包含存款。
  • @badprogramming99:每个人都会遇到。周六我也发生了类似的事情。
猜你喜欢
  • 2010-10-06
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2021-05-17
  • 2019-10-18
相关资源
最近更新 更多